麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > Android > 正文

Android ViewPager相冊橫向移動的實現方法

2020-04-11 12:29:34
字體:
來源:轉載
供稿:網友

當我們第一次下載QQ并且打開的時候,會有一個新手引導,引導是幾張圖片,再加上一些文字說明,向右滑動,直到結束,今天一大早起來研究了一下關于此種效果的實現之ViewPager控件。

下面這個例子將用ViewPager實現橫向移動相冊,ViewPager有一個對應的PagerAdapter,用于綁定數據;我們需要繼承此類并實現自己的功能。

1、首先定義一個顯示項所需要使用的數據對象ImageItem

復制代碼 代碼如下:

public class ImageItem {
 private int id;// 資源id
 private String name;// 顯示的名稱
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public ImageItem(int id, String name) {
  super();
  this.id = id;
  this.name = name;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
}

2、ViewPager中每一面為一個Item,所以在layout目錄下定義一個ViewPager的每一頁的Item,名為pageritem.xml

復制代碼 代碼如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <ImageView
    android:id="@+id/imgview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:contentDescription="@string/app_name"
    android:scaleType="fitXY" />

  <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center_horizontal" />

</FrameLayout>

3、新建一個java文件,對應ViewPager的每一項Item

復制代碼 代碼如下:

public class ViewpagerItem extends FrameLayout {
 private ImageView imageview;// 顯示圖片的ImageView
 private TextView textview;
 private Bitmap bitmap;// 圖片對應的Bitmap
 private ImageItem imageitem;// 每一個圖片項對象

 public ViewpagerItem(Context context) {
  super(context);
  setViews();
 }
 public ViewpagerItem(Context context, AttributeSet attrs) {
  super(context, attrs);
  setViews();
 }

 public void setData(ImageItem item) {// 用ImageItem填充數據
  this.imageitem = item;
  int resid = item.getId();
  String name = item.getName();
  imageview.setImageResource(resid);
  textview.setText(name);
 }

 public void reload() {// 重新載入數據
  int resid = imageitem.getId();
  imageview.setImageResource(resid);
 }

 public void recycle() {// 回收數據
  imageview.setImageBitmap(null);
  if (this.bitmap == null || this.bitmap.isRecycled()) {
   return;
  }
  this.bitmap.recycle();
  this.bitmap = null;
 }

 public void setViews() {
  LayoutInflater infalter = LayoutInflater.from(getContext());
  View view = infalter.inflate(R.layout.pageritem, null);
  textview = (TextView) view.findViewById(R.id.textView);
  imageview = (ImageView) view.findViewById(R.id.imgview);

  addView(view);
 }
}

4、新建一個數據填充器PagerItemAdapter,繼承自PagerAdapter

復制代碼 代碼如下:

public class PagerItemAdapter extends PagerAdapter {
 private Context context;
 private ImageItem[] image;

 public PagerItemAdapter(Context context, ImageItem[] image) {
  this.context = context;
  this.image = image;
  hashMap = new HashMap<Integer, ViewpagerItem>();
 }

 private HashMap<Integer, ViewpagerItem> hashMap;// 保存相片的id以及對應的ViewpagerItem

 @Override
 public int getCount() {
  return image.length;
 }

 @Override
 public boolean isViewFromObject(View arg0, Object arg1) {
  return arg0 == arg1;
 }

 @Override
 public void finishUpdate(ViewGroup container) {
  super.finishUpdate(container);
 }

 @Override// 初始化一個ViewpagerItem,如果已經存在就重新載入,沒有的話new一個
 public Object instantiateItem(ViewGroup container, int position) {
  ViewpagerItem item;
  if (hashMap.containsKey(position)) {
   item = hashMap.get(position);
   item.reload();
  } else {
   item = new ViewpagerItem(context);
   ImageItem itemimg = image[position];
   item.setData(itemimg);
   hashMap.put(position, item);
   ((ViewPager) container).addView(item);
  }
  return item;
 }

 @Override// 當我們左右滑動圖片的時候會將圖片回收掉
 public void destroyItem(View container, int position, Object object) {
  ViewpagerItem item = (ViewpagerItem) object;
  item.recycle();
 }
}

5、在main.xml文件中添加一個ViewPager控件

復制代碼 代碼如下:

<android.support.v4.view.ViewPager
  android:id="@+id/viewpager"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" />

6、修改MainActivity如下:

復制代碼 代碼如下:

public class MainActivity extends Activity {
 private final static int RES[] = { R.drawable.p1, R.drawable.p2 };// p1,p2為drawable文件夾下的兩張圖片
 private ViewPager viewpager;
 private PagerItemAdapter adapter;
 private ImageItem[] item;

 private void setView(){
  item = new ImageItem[2];
  item[0] = new ImageItem(RES[0], "page1");
  item[1] = new ImageItem(RES[1], "page2");
  viewpager = (ViewPager) findViewById(R.id.viewpager);
  adapter = new PagerItemAdapter(getApplicationContext(), item);
  viewpager.setAdapter(adapter);
 }

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  setView();
 }
}


 運行程序,左右滑動屏幕出現如下效果!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: av在线免费观看中文字幕 | 黄网站在线免费 | 天天都色视频 | 黄色网欧美 | 亚洲一级电影在线观看 | 亚洲第一色片 | 欧美性受xxxx人人本视频 | 欧美日韩网站在线观看 | 欧美成年私人网站 | 亚洲免费在线看 | 亚洲精品一区国产精品丝瓜 | 久久精品中文字幕一区二区 | 成人午夜视频免费看 | 中文字幕在线观看1 | 一区二区三高清 | 欧美伦理一区二区 | 国产精品午夜在线观看 | 欧美成人精品一区 | 视频在线亚洲 | 成人在线视频在线观看 | chinese中国真实乱对白 | 国产午夜网 | 欧美精品一区二区久久久 | 欧美成人精品一级 | 羞羞视频| 香蕉在线播放 | 九九视频在线观看黄 | 亚洲综合精品 | 欧产日产国产精品乱噜噜 | 欧美成人国产va精品日本一级 | 欧美a区| 久久久久久久久久亚洲 | 精国品产一区二区三区有限公司 | 久久精品无码一区二区三区 | 欧美成人一区二区视频 | 国产精品久久久久久久久久10秀 | 激情宗合网 | 国产91在线亚洲 | 激情大乳女做爰办公室韩国 | av国语 | 伊人999 |