Android ViewPager使用
2016-07-05 22:28
597 查看
ViewPager可以方便的实现左右滑动的导航页面的效果,使用方法和ListView差不多
2. 自定义适配器,实现相关方法(添加要显示的view)
3. 代码中findviewbyid找到对象,设置自定义适配器
注意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);
使用步骤:
1. 布局文件中声明2. 自定义适配器,实现相关方法(添加要显示的view)
3. 代码中findviewbyid找到对象,设置自定义适配器
代码示例:
布局文件中的声明
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="30dp" android:paddingLeft="30dp" android:paddingRight="30dp" android:text="开始体验" android:textSize="20sp" android:visibility="gone" /> </RelativeLayout>
自定义适配器,设置适配器等
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<ImageView> 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<ImageView>(); 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);
相关文章推荐
- Android App开发中ViewPager组件的入门使用教程
- 使用ViewPager实现高仿launcher左右拖动效果
- Android App中用Handler实现ViewPager页面的自动切换
- Android应用中使用ViewPager实现类似QQ的界面切换效果
- Android中ViewPager组件的基本用法及实现图片切换的示例
- 灵活使用Android中ActionBar和ViewPager切换页面
- Android实现千变万化的ViewPager切换动画
- Android中viewPager使用指南
- Android 使用 ViewPager循环广告位的实现
- Android中ViewPager实现滑动指示条及与Fragment的配合
- 详解Android App中ViewPager使用PagerAdapter的方法
- Android viewpager中动态添加view并实现伪无限循环的方法
- Android应用中使用ViewPager和ViewPager指示器来制作Tab标签
- Android ViewPager制作新手导航页(动态加载)
- 详解Android App中创建ViewPager组件的方法
- Android App中ViewPager与Fragment结合的一些问题解决
- 实现轮转广告带底部指示的自定义ViewPager控件
- 自定义RadioButton和ViewPager实现TabHost带滑动的页卡效果
- 实例讲解Android中ViewPager组件的一些进阶使用技巧
- Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果