Android ViewPager实现图片轮翻效果
程序员文章站
2024-02-19 21:54:40
很多app都有这种效果,特别一些电商类的app,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几...
很多app都有这种效果,特别一些电商类的app,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的状态也在变化),用定时器来实现不难。
import java.util.arraylist; import java.util.list; import android.app.activity; import android.os.bundle; import android.os.handler; import android.os.message; import android.os.systemclock; 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.viewgroup; import android.widget.imageview; import android.widget.linearlayout; import android.widget.linearlayout.layoutparams; import android.widget.textview; public class mainactivity extends activity implements onpagechangelistener { protected static final string tag = "mainactivity"; private list<imageview> imageviewlist; private viewpager mviewpager; private final int[] imageresids = { r.drawable.a, r.drawable.b, r.drawable.c, r.drawable.d, r.drawable.e }; private final string[] imagedescriptions = { "巩俐不低俗,我就不能低俗", "扑树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网tv版大派送", "热血屌丝的反杀" }; private textview tvimagedescription; // 图片描述 private linearlayout llpointgroup; // 点控件的组 private int previousposition = 0; // viewpager选中的前一个position private boolean isstop = false; // 控制循环的子线程是否停止 private handler handler = new handler(){ @override public void handlemessage(message msg) { super.handlemessage(msg); mviewpager.setcurrentitem(mviewpager.getcurrentitem() + 1); } }; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); new thread(new runnable() { @override public void run() { // 每两秒钟向主线程发送一条消息, 切换viewpager的界面 while(!isstop) { systemclock.sleep(2000); handler.sendemptymessage(0); } log.i(tag, "循环线程停止了"); }}).start(); } @override protected void ondestroy() { isstop = true; super.ondestroy(); } private void initview() { mviewpager = (viewpager) findviewbyid(r.id.viewpager); llpointgroup = (linearlayout) findviewbyid(r.id.ll_point_group); tvimagedescription = (textview) findviewbyid(r.id.tv_image_description); imageviewlist = new arraylist<imageview>(); imageview iv; view pointview; layoutparams params; for (int i = 0; i < imageresids.length; i++) { iv = new imageview(this); iv.setbackgroundresource(imageresids[i]); imageviewlist.add(iv); // 根据图片添加点 pointview = new view(this); params = new layoutparams(5, 5); params.leftmargin = 5; pointview.setlayoutparams(params); pointview.setenabled(false); pointview.setbackgroundresource(r.drawable.point_bg); llpointgroup.addview(pointview); } mypageradapter madapter = new mypageradapter(); mviewpager.setadapter(madapter); mviewpager.setonpagechangelistener(this); int item = (integer.max_value / 2) - ((integer.max_value / 2) % imageviewlist.size()); mviewpager.setcurrentitem(item); // 设置当前选中的item的position tvimagedescription.settext(imagedescriptions[previousposition]); llpointgroup.getchildat(previousposition).setenabled(true); // 第一点被选中 } class mypageradapter extends pageradapter { @override public int getcount() { return integer.max_value; } /** * 移动的对象和进来的对象如果是同一个就返回true, 代表复用view对象 * false 使用object对象 */ @override public boolean isviewfromobject(view arg0, object arg1) { return arg0 == arg1; } /** * 需要销毁的对象的position传进来 */ @override public void destroyitem(viewgroup container, int position, object object) { // 移除掉指定position的对象 mviewpager.removeview(imageviewlist.get(position % imageviewlist.size())); } /** * 加载position位置的view对象 */ @override public object instantiateitem(viewgroup container, int position) { // 添加指定position的对象 mviewpager.addview(imageviewlist.get(position % imageviewlist.size())); return imageviewlist.get(position % imageviewlist.size()); } } @override public void onpagescrollstatechanged(int arg0) { // todo auto-generated method stub } @override public void onpagescrolled(int arg0, float arg1, int arg2) { // todo auto-generated method stub } /** * 当viewpager页面切换时回调 * @param position 就是当前显示的page页 */ @override public void onpageselected(int position) { tvimagedescription.settext(imagedescriptions[position % imageviewlist.size()]); llpointgroup.getchildat(position % imageviewlist.size()).setenabled(true); llpointgroup.getchildat(previousposition).setenabled(false); previousposition = position % imageviewlist.size(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 老生常谈Java异常处理和设计(推荐)
下一篇: Java实现抢红包功能