Viewpager

xiaoxiao2025-10-10  3

ublic class MainActivity extends AppCompatActivity { // 将ViewPager定义为全局变量,方便使用. private ViewPager viewpager_vp; // 建立一个ArrayList集合.泛型指定为ImageView. private ArrayList ImageViews = new ArrayList(); //图片int数组资源 private int[] imageResIds = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e, }; //图片字符串数组String[]资源. private String[] descs = { “巩俐不低俗,我就不能低俗”, “扑树又回来啦!再唱经典老歌引万人大合唱”, “揭秘北京电影如何升级”, “乐视网TV版大派送”, “热血屌丝的反杀”, };

private LinearLayout ll_dot; private TextView viewPager_tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //对控件进行初始化 init(); } /** * 对VIewPager进行初始化. */ private void init() { //找到可以设置点的容器LinearLayout的对象,进行点的添加 ll_dot = (LinearLayout) findViewById(R.id.ll_dot); //找到文本的对象. viewPager_tv = (TextView) findViewById(R.id.ViewPager_tv); //找到VIewPager对象. viewpager_vp = (ViewPager) findViewById(R.id.viewpager_vp); //更加图片int数组资源的数量,动态的创建ImageView控件.就是有几张图片,创建几个ImageView,for循环 for (int x = 0; x < imageResIds.length; x++) { //创建ImageView对象 ImageView imageView = new ImageView(this); //通过该对象添加图片资源..setBackgroundResource方法. imageView.setBackgroundResource(imageResIds[x]); //把控件添加到集合ImageViews中去,以方便在VIewPager的适配器里instantiateItem方法获取. ImageViews.add(imageView); //进行点的添加,其个数和图片的个数一致,因此放到该循环中, createDot(x); } //设置适配器.setAdapter viewpager_vp.setAdapter(new MyViewpagerAdapter()); //设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了 viewpager_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { //同过getCurrentItem方法拿到当前用户所交互ViewPager的item位置. int currentItem = viewpager_vp.getCurrentItem(); //通过得到的这个item,给text和点进行选中的设置. changeTextandDot(currentItem); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); } /** * 注意:看一个方法或类的信息快捷键:Ctrl+Q; * 像ListVIew一样,创建一个ViewPager的适配器,自定义一个类继承PagerAdapter */ class MyViewpagerAdapter extends PagerAdapter { //getContent,设置ViewPager的条目个数.一般就是集合或者资源数组的长度. @Override public int getCount() { return ImageViews.size(); } //isViewFromObject,判断ViewPager的条目View对象和InstantiateItem返回的Object对象是否一致,固定格式:return view==object; @Override public boolean isViewFromObject(View view, Object object) { return view == object; } //Ctrl+H:看到一个类的基础结构图 ctrl+h+l:快速格式化. //instantiateItem,ViewPager添加条目的操作.container:VIewPager的化身,控件都是添加到他身上,position:代表用户滑动条目的位置 @Override public Object instantiateItem(ViewGroup container, int position) { //根据条目所在位置(利用Position),从ImageViews集合里获取相对应的ImageVIew图片. ImageView imageView = ImageViews.get(position); //把得到ImageView对象,添加给VIewPager对象,也就是container,使用addView container.addView(imageView); //注意:你添加给VIewPager什么控件,就要返回该控件,给isViewFromObject进行比较判断,这里添加的是ImageView,返回的就是ImageView return imageView; } //防止内存泄漏.相当于ListView的复用container,销毁一个page,该方法的实际就是将instantiateItem返回的VIew对象从ViewPager中移除, //container:还是ViewPager控件自身 position: object:则代表了View控件,使用时要强转成View一下 //补充:为什么参数是Object,而不直接是View,因为虽然99%是view,但也有可能是Fragment,所以用Object,提高了可扩展性. //构造方法删除后,也是固定格式:container.removeView((View) object); @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } /** * 根据ViewPager的item的变化,也就是图片切换的操作,设置对应的点和文本. * @param position int ViewPager的item,也是图片的位置 */ public void changeTextandDot(int position){ //根据ViewPager的item的变化,设置对应的文本.setText(descs[position]); viewPager_tv.setText(descs[position]); //对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比 for(int x=0; x< imageResIds.length; x++){ //.getChildAt(x);拿到容器的子控件.得到VIew对象 View childAt = ll_dot.getChildAt(x); //为View设置背景图片,,使用三元运算符. childAt.setBackgroundResource(x==position?R.drawable.dot_focus:R.drawable.dot_normal); } } /** * 更加图片资源的数量,动态的创建点 */ private void createDot(int x) { //创建一个View对象; View view= new View(this); //为这个View对象设置背景setBackgroundResource view.setBackgroundResource(R.drawable.dot_normal); //为View对象设置宽高参数,使用参数对象LayoutParams(int,int),给哪个容器,就用哪个容器创建 LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(8,8); //使用参数对象LayoutParams.leftMargin=int,相当于布局里的padding. layoutParams.leftMargin=8; //把准备好的layoutParams参数对象,设置给View对象.setLayoutParams view.setLayoutParams(layoutParams); //最后容器对象.addView(VIwe); ll_dot.addView(view); }
转载请注明原文地址: https://www.6miu.com/read-5037653.html

最新回复(0)