博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ViewPager使用
阅读量:3986 次
发布时间:2019-05-24

本文共 3463 字,大约阅读时间需要 11 分钟。

ViewPager可以方便的实现左右滑动的导航页面的效果,使用方法和ListView差不多

使用步骤:

1. 布局文件中声明

2. 自定义适配器,实现相关方法(添加要显示的view)

3. 代码中findviewbyid找到对象,设置自定义适配器

代码示例:

布局文件中的声明

自定义适配器,设置适配器等

package com.example.guide;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;public class GuideActivity extends Activity {	private ViewPager viewPager;	private Button button;	private List
arrayList; public String tag = "GuideActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.guide); viewPager = (ViewPager) findViewById(R.id.view_pager); button = (Button) findViewById(R.id.button); initData(); //设置一个数据适配器 viewPager.setAdapter(new MyPagerAdapter()); //监听viewpager选中界面的方法 viewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { if(arg0 == arrayList.size()-1){ //停留在最后一个界面 button.setVisibility(View.VISIBLE); //注册一个点击事件 button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //跳转操作 Intent intent = new Intent(GuideActivity.this, MainActivity.class); startActivity(intent); //关闭当前界面 finish(); } }); }else{ //停留在其他界面 button.setVisibility(View.GONE); } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } private void initData() { ImageView imageView = new ImageView(getApplicationContext()); imageView.setBackgroundResource(R.drawable.guide_1); ImageView imageView1 = new ImageView(getApplicationContext()); imageView1.setBackgroundResource(R.drawable.guide_2); ImageView imageView2 = new ImageView(getApplicationContext()); imageView2.setBackgroundResource(R.drawable.guide_3); arrayList = new ArrayList
(); arrayList.add(imageView); arrayList.add(imageView1); arrayList.add(imageView2); } //viewpager默认有一个预先加载将要展示的界面 class MyPagerAdapter extends PagerAdapter{ @Override public int getCount() { return arrayList.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } //给viewpager填充view的方法 @Override public Object instantiateItem(ViewGroup container, int position) { //添加viewpager中item的所在位置 Log.i(tag,"instantiateItem position = "+position); //将imageview添加到viewpager中 container.addView(arrayList.get(position)); //返回添加的imageview return arrayList.get(position); } //给viewpager移除view的方法 @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.i(tag,"destroyItem position = "+position); container.removeView((View)object); } }}

注意PagerAdapter的预加载和缓存机制,

默认预先加载后一个pager,保留前一个pager

也就是说在第0个pager的时候,已经调用了第1个pager的instantiateItem函数了

在第1个pager的时候,已经调用了第2个pager的instantiateItem函数了,而第0个的destroyItem还不会被调用

在第2个pager的时候,已经调用了第3个pager的instantiateItem函数了,此时第0个destroyItem才会被调用

ViewPager可以滑动切换pager,也可以用代码切换到指定pager

viewPager.setCurrentItem(0);

转载地址:http://adxui.baihongyu.com/

你可能感兴趣的文章
算法:单调栈
查看>>
算法:二叉树Morris遍历
查看>>
算法:二叉树中两节点最近公共祖先节点
查看>>
算法:最长上升子序列系列问题
查看>>
算法:位运算 与 n皇后问题
查看>>
算法:字符串问题
查看>>
算法:回文串问题
查看>>
算法:一致性哈希算法 与 岛问题
查看>>
算法:贪心问题
查看>>
算法:大楼轮廓问题
查看>>
算法:加油站良好的出发点
查看>>
算法:计算几何问题
查看>>
算法:邮局选址问题
查看>>
算法:Manacher算法找回文子串
查看>>
算法:设计LRU和LFU缓存结构
查看>>
算法:图论问题
查看>>
算法:拓扑排序
查看>>
算法:最小生成树MST
查看>>
算法:最短路径问题
查看>>
算法:差分约束
查看>>