国产精品吹潮在线播放,日韩一区二区三区在线播放,啊级免费黄片视频,66av视频

網(wǎng)站首頁
手機(jī)版

android使用ViewPager實現(xiàn)輪播效果教程 android banner輪播圖

更新時間:2022-12-07 06:04:14作者:佚名

android使用ViewPager實現(xiàn)輪播效果教程 android banner輪播圖

  ViewPager:一個可以實現(xiàn)視圖左右滑動切換的控件。

  ViewPager的基本使用:

  ViewPager的視圖需要通過PagerAdapter來實現(xiàn)顯示。

  PagerAdapter的主要方法:

  ● getCount 視圖的數(shù)量

  ● instantiateItem 添加視圖

  ● destroyItem 銷毀視圖

  ● isViewFromObject 是否由對象創(chuàng)建視圖

  ViewPager的常用方法:

  setAdapter 設(shè)置適配器

  addOnPageChangeListener 監(jiān)聽頁面切換的狀態(tài)

  setCurrentItem 設(shè)置當(dāng)前頁面的索引

  實現(xiàn)廣告輪播

  技術(shù)點分析:

  1、網(wǎng)絡(luò)連接

  2、JSON解析

  3、ViewPager的初始化

  4、圖片的異步加載

  5、圓點指示器的實現(xiàn)

  使用selector+shape實現(xiàn)圓點圖片

  動態(tài)創(chuàng)建ImageView添加到集合中,同時添加到布局中

  在ViewPager切換事件中,切換圓點狀態(tài)

  6、自動切換效果

  使用Handler的post方法,定時執(zhí)行代碼

  資源文件:

  mydot.xml //創(chuàng)建圓點資源,放在drawable文件下

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  布局文件:

  activity_main.xml

  

  xmlns:tools="http://schemas.android.com/tools"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  tools:context=".MainActivity" >

  

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:id="@+id/lv_list" />

  

  activity_banner.xml

  

  xmlns:tools="http://schemas.android.com/tools"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  tools:context=".MainActivity" >

  

  android:id="@+id/vp_image"

  android:layout_width="wrap_content"

  android:layout_height="150dp"

  android:layout_gravity="center" />

  

  android:layout_width="match_parent"

  android:layout_height="40dp"

  android:id="@+id/layout"

  android:layout_gravity="bottom"

  android:gravity="center"

  android:orientation="horizontal"

  >

  

  java代碼

  ImageLoader.java //該代碼是通過URL獲取圖片資源

  package cn.edu.huse.banner_re.util;

  import android.graphics.Bitmap;

  import android.graphics.BitmapFactory;

  import android.os.AsyncTask;

  import java.io.IOException;

  import java.io.InputStream;

  import java.net.HttpURLConnection;

  import java.net.MalformedURLException;

  import java.net.URL;

  /**

  * 圖片加載的工具類

  * @author xray

  *

  */

  public class ImageLoader {

  /**

  * 圖片加載完成的回調(diào)接口

  * 添加URL參數(shù),用于做圖片錯位判斷

  */

  public interface OnImageLoadListener{

  //完成圖片加載

  void onImageLoadComplete(String url, Bitmap bitmap);

  }

  private OnImageLoadListener mListener;

  /**

  * 啟動圖片加載任務(wù)

  * @param urlStr

  * @param listener

  */

  public void loadImage(String urlStr,OnImageLoadListener listener){

  this.mListener = listener;

  new ImageLoadTask().execute(urlStr);

  }

  /**

  * 圖片加載任務(wù)

  * @author xray

  *

  */

  class ImageLoadTask extends AsyncTask

  @Override

  protected UrlAndBitmap doInBackground(String... params) {

  try {

  //創(chuàng)建URL,指定圖片地址

  URL url = new URL(params[0]);

  //打開連接獲得HttpURLConnection對象

  HttpURLConnection conn = (HttpURLConnection) url.openConnection();

  //獲得文件輸入流

  InputStream stream = conn.getInputStream();

  //把輸入流轉(zhuǎn)換為圖片

  Bitmap bmp = BitmapFactory.decodeStream(stream);

  //關(guān)閉流

  stream.close();

  return new UrlAndBitmap(params[0],bmp);

  } catch (MalformedURLException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  return null;

  }

  //包裝圖片地址和圖片

  class UrlAndBitmap{

  String url;

  Bitmap bitmap;

  public UrlAndBitmap(String url, Bitmap bitmap) {

  this.url = url;

  this.bitmap = bitmap;

  }

  }

  @Override

  protected void onPostExecute(UrlAndBitmap result) {

  //進(jìn)行接口回調(diào)

  if(mListener != null){

  mListener.onImageLoadComplete(result.url,result.bitmap);

  }

  }

  }

  }

  JSONLoader.java

  //讀取服務(wù)器json

  package cn.edu.huse.banner_re.util;

  import android.os.AsyncTask;

  import java.io.IOException;

  import java.io.InputStream;

  import java.net.HttpURLConnection;

  import java.net.MalformedURLException;

  import java.net.URL;

  /**

  * 讀取服務(wù)器JSON的工具類

  * @author xray

  *

  */

  public class JSONLoader {

  public interface OnJSONLoadListener{

  void onJSONLoadComplete(String json);

  }

  private OnJSONLoadListener mListener;

  public void loadJSON(String urlStr,OnJSONLoadListener listener){

  this.mListener = listener;

  new JSONLoadTask().execute(urlStr);

  }

  class JSONLoadTask extends AsyncTask

  @Override

  protected String doInBackground(String... params) {

  try {

  URL url = new URL(params[0]);

  HttpURLConnection conn = (HttpURLConnection) url.openConnection();

  InputStream inputStream = conn.getInputStream();

  byte[] buffer = new byte[1024];

  int len = 0;

  //StringBuffer 線程安全,性能低 VS StringBuilder 線程不安全,性能高

  StringBuilder strB = new StringBuilder();

  while((len = inputStream.read(buffer)) != -1){

  //將字節(jié)碼轉(zhuǎn)換為String

  String str = new String(buffer,0,len);

  strB.append(str);

  }

  inputStream.close();

  return strB.toString();

  } catch (MalformedURLException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  return null;

  }

  @Override

  protected void onPostExecute(String result) {

  if(mListener != null){

  mListener.onJSONLoadComplete(result);

  }

  }

  }

  }

  MyViewPagerAdapter.java

  package cn.edu.huse.banner_re.adapter;

  import java.util.List;

  import android.support.v4.view.PagerAdapter;

  import android.view.View;

  import android.view.ViewGroup;

  import android.widget.ImageView;

  /**

  * 圖片輪播的適配器

  * @author Lenovo

  *

  */

  public class MyViewPagerAdapter extends PagerAdapter {

  private List mData;

  public MyViewPagerAdapter(List mData) {

  this.mData = mData;

  }

  //返回視圖的數(shù)量

  @Override

  public int getCount() {

  return mData.size();

  }

  @Override

  public boolean isViewFromObject(View arg0, Object arg1) {

  return arg0 == arg1;

  }

  //銷毀圖片

  @Override

  public void destroyItem(ViewGroup container, int position, Object object) {

  container.removeView(mData.get(position));

  }

  //添加圖片

  @Override

  public Object instantiateItem(ViewGroup container, int position) {

  container.addView(mData.get(position));

  return mData.get(position);

  }

  }

  MainActivity.java

  package cn.edu.huse.banner_re;

  import java.util.ArrayList;

  import java.util.List;

  import org.json.JSONArray;

  import org.json.JSONObject;

  import android.app.Activity;

  import android.graphics.Bitmap;

  import android.os.Bundle;

  import android.os.Handler;

  import android.support.v4.view.ViewPager;

  import android.support.v4.view.ViewPager.OnPageChangeListener;

  import android.view.LayoutInflater;

  import android.view.View;

  import android.view.View.OnClickListener;

  import android.widget.ArrayAdapter;

  import android.widget.ImageView;

  import android.widget.LinearLayout;

  import android.widget.ListView;

  import android.widget.RadioButton;

  import cn.edu.huse.banner_re.adapter.MyViewPagerAdapter;

  import cn.edu.huse.banner_re.util.ImageLoader;

  import cn.edu.huse.banner_re.util.ImageLoader.OnImageLoadListener;

  import cn.edu.huse.banner_re.util.JSONLoader;

  import cn.edu.huse.banner_re.util.JSONLoader.OnJSONLoadListener;

  public class MainActivity extends Activity implements OnClickListener{

  public static final String URL_GIFT = "http://www.1688wan.com/majax.action?method=getGiftList&pageno=1";

  public static final String URL_BASE = "http://www.1688wan.com";

  private ListView mLv;

  //放置圓點圖片的布局

  private LinearLayout mLayout;

  private ViewPager mPager;

  //保存viewpager上圖片的集合

  private List mImageViews;

  //保存圓點圖片的集合

  private List mDotViews;

  //當(dāng)前圖片

  private ImageView mDotView;

  //當(dāng)前下標(biāo)

  private int mIndex;

  private Handler mHandler = new Handler();

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  //初始化viewpager

  initViewPager();

  }

  private void initViewPager() {

  new JSONLoader().loadJSON(URL_GIFT, new OnJSONLoadListener() {

  @Override

  public void onJSONLoadComplete(String json) {

  //得到圖片的地址

  List list = josnPare(json);

  //初始化主控件

  initView();

  //將圖片顯示到viewpager中

  initImageViews(list);

  //為ViewPager設(shè)置適配器

  mPager.setAdapter(new MyViewPagerAdapter(mImageViews));

  //加載圓點圖片

  initDot(mImageViews.size());

  //實現(xiàn)圖片的輪播

  mPager.postDelayed(new Runnable() {

  @Override

  public void run() {

  //下標(biāo)自動++

  mIndex++;

  //當(dāng)下標(biāo)到最后時,就重新來過

  if(mIndex >= mImageViews.size()){

  mIndex = 0;

  }

  //設(shè)置圖片

  mPager.setCurrentItem(mIndex);

  //重復(fù)調(diào)用

  mHandler.postDelayed(this, 1500);

  }

  }, 1500);

  //添加頁碼滑動的監(jiān)聽,實現(xiàn)圓點圖片的切換

  mPager.setOnPageChangeListener(new OnPageChangeListener() {

  //頁選中后調(diào)用

  @Override

  public void onPageSelected(int arg0) {

  //改變原來的圓點圖片的狀態(tài)

  mDotView.setEnabled(true);

  //更新當(dāng)前的圓點圖片

  mDotView = mDotViews.get(arg0);

  //將當(dāng)前選中的圓點設(shè)為選中狀態(tài)

  mDotView.setEnabled(false);

  //更新下標(biāo)

  mIndex = arg0;

  }

  //滑動中途調(diào)用

  @Override

  public void onPageScrolled(int arg0, float arg1, int arg2) {

  }

  //頁面滑動狀態(tài)修改

  @Override

  public void onPageScrollStateChanged(int arg0) {

  }

  });

  }

  });

  }

  /**獲取圓點圖片函數(shù)

  * @param count viewpager上圖片的數(shù)量

  */

  private void initDot(int count){

  mDotViews = new ArrayList();

  LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

  LinearLayout.LayoutParams.WRAP_CONTENT,

  LinearLayout.LayoutParams.WRAP_CONTENT);

  //設(shè)置邊距

  params.setMargins(5, 0, 5, 0);

  for(int i = 0; i < count; i++){

  ImageView image = new ImageView(this);

  //設(shè)置圓點圖片

  image.setImageResource(R.drawable.mydot);

  //設(shè)置圖片的位置,方便后面的取值

  image.setTag(i);

  //設(shè)置監(jiān)聽

  image.setOnClickListener(this);

  //添加到布局中

  mLayout.addView(image, params);

  //將圓點圖片保存到集合中

  mDotViews.add(image);

  }

  mDotView = mDotViews.get(0);

  mDotView.setEnabled(false);

  }

  /**

  *顯示圖片的函數(shù)

  */

  private void initImageViews(List list) {

  mImageViews = new ArrayList();

  for(String str : list){

  final ImageView imageView = new ImageView(this);

  //設(shè)置默認(rèn)圖片

  imageView.setImageResource(R.drawable.ic_launcher);

  new ImageLoader().loadImage(URL_BASE+str, new OnImageLoadListener() {

  @Override

  public void onImageLoadComplete(String url, Bitmap bitmap) {

  if(bitmap != null){

  imageView.setImageBitmap(bitmap);

  }

  }

  });

  //將ImageView保存到集合中

  mImageViews.add(imageView);

  }

  }

  /**

  * JSON解析獲取圖片的地址

  * @param url

  * @return

  */

  private List josnPare(String url){

  List list = new ArrayList();

  try {

  JSONObject jobj = new JSONObject(url);

  JSONArray array = jobj.getJSONArray("ad");

  for(int i = 0; i < array.length(); i++){

  JSONObject obj = (JSONObject) array.get(i);

  list.add(obj.getString("iconurl"));

  }

  } catch (Exception e) {

  e.printStackTrace();

  }

  return list;

  }

  /**

  * 初始化控件

  */

  private void initView() {

  //找到控件

  mLv = (ListView) findViewById(R.id.lv_list);

  View view = LayoutInflater.from(this).inflate(R.layout.activity_banner, null);

  mPager = (ViewPager)view.findViewById(R.id.vp_image);

  //圓點圖片布局

  mLayout = (LinearLayout)view.findViewById(R.id.layout);

  //模擬數(shù)據(jù)

  List mList = new ArrayList();

  for(int i = 0; i < 20; i++){

  mList.add("條目--"+i);

  }

  //創(chuàng)建適配器

  ArrayAdapter mAdapter = new ArrayAdapter(this,

  android.R.layout.simple_list_item_1,

  android.R.id.text1,

  mList);

  //設(shè)置頭部視圖

  mLv.addHeaderView(view);

  //設(shè)置適配器

  mLv.setAdapter(mAdapter);

  /*//圓點圖片布局

  mLayout = (LinearLayout)findViewById(R.id.layout);*/

  }

  /**

  * 圓點圖片的監(jiān)聽事件

  */

  @Override

  public void onClick(View arg0) {

  //獲取該圓點圖片的位置

  int index = Integer.parseInt(arg0.getTag().toString());

  //將viewpager的圖片顯示成下標(biāo)為index的圖片

  mPager.setCurrentItem(index);

  //將原來的設(shè)置成默認(rèn)值

  mDotView.setEnabled(true);

  //保存新的值

  mDotView = (ImageView) arg0;

  //將新的值改變成false

  mDotView.setEnabled(false);

  //更新下標(biāo)

  mIndex = index;

  }

  }

  注意:因為這里用到了json解析,需要用到聯(lián)網(wǎng)操作,一定要寫上上網(wǎng)的權(quán)限:

android使用ViewPager實現(xiàn)輪播效果教程

  運行效果:

android使用ViewPager實現(xiàn)輪播效果教程

本文標(biāo)簽: 圖片  圓點  下標(biāo)  

為您推薦

百度瀏覽器首頁怎么裝扮(怎樣把百度瀏覽器設(shè)為主頁)

百度瀏覽器首頁怎么裝扮 百度瀏覽器首頁怎么裝扮 1.使用的電腦中,必須安裝瀏覽器.腳本之家上面提供了百度瀏覽器的下載,大家可以下載使用. 2.要對百度首頁進(jìn)行個

2022-12-09 15:06

百度瀏覽器怎么靜音?(百度瀏覽器怎么關(guān)閉靜音模式)

百度瀏覽器怎么靜音? 百度瀏覽器怎么靜音? 1.首先下載最新版本的百度瀏覽器8.3版本以上即可.目前最新版本是8.5 2.然后隨便打開一個有聲音的頁面,比如說看

2022-12-09 15:06

百度瀏覽器如何更改下載目錄(百度瀏覽器如何更改下載目錄位置)

百度瀏覽器如何更改下載目錄 百度瀏覽器如何更改下載目錄 下面我們一起來看看在百度瀏覽器中如何修改下載目錄吧. 在手機(jī)上安裝百度瀏覽器,打開手機(jī)上的百度瀏覽器后,

2022-12-09 15:05

百度瀏覽器怎么截取完整的網(wǎng)頁? 百度瀏覽器怎么截取完整的網(wǎng)頁圖片

百度瀏覽器怎么截取完整的網(wǎng)頁? ? 百度瀏覽器怎么截取完整的網(wǎng)頁? 1.在新版百度瀏覽器中,在最右上角的一個綠色圖標(biāo),就是[截圖]按鈕,如下圖所示: 2.另外,

2022-12-09 15:05

百度瀏覽器實時預(yù)測功怎么關(guān)閉

百度瀏覽器實時預(yù)測功怎么關(guān)閉 百度瀏覽器實時預(yù)測功怎么關(guān)閉 1.在百度搜索引擎中,輸入相關(guān)的關(guān)鍵詞則會推薦出相應(yīng)的信息.如圖所示; 2.在網(wǎng)頁瀏覽器中,打開百度

2022-12-09 15:04

百度瀏覽器打不開網(wǎng)頁的解決辦法 百度瀏覽器有的網(wǎng)頁打不開

百度瀏覽器打不開網(wǎng)頁的解決辦法 百度瀏覽器打不開網(wǎng)頁怎么辦 百度瀏覽器打不開網(wǎng)頁的解決辦法 ?百度瀏覽器打不開網(wǎng)頁怎么辦 百度瀏覽器怎么打不開? 小編胖胖帶來了

2022-12-09 15:04