最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android ViewPager实现图片轮翻效果
时间:2017-02-28 编辑:简简单单 来源:一聚教程网
很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的状态也在变化),用定时器来实现不难。
代码如下 | 复制代码 |
importjava.util.ArrayList; importjava.util.List;
importandroid.app.Activity; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.os.SystemClock; importandroid.support.v4.view.PagerAdapter; importandroid.support.v4.view.ViewPager; importandroid.support.v4.view.ViewPager.OnPageChangeListener; importandroid.util.Log; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.ImageView; importandroid.widget.LinearLayout; importandroid.widget.LinearLayout.LayoutParams; importandroid.widget.TextView;
publicclassMainActivityextendsActivityimplementsOnPageChangeListener {
protectedstaticfinalString TAG ="MainActivity"; privateList privateViewPager mViewPager; privatefinalint[] imageResIDs = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; privatefinalString[] imageDescriptions = { "巩俐不低俗,我就不能低俗", "扑树又回来啦!再唱经典老歌引万人大合唱", "揭秘北京电影如何升级", "乐视网TV版大派送", "热血?潘康姆瓷?quot; }; privateTextView tvImageDescription;// 图片描述 privateLinearLayout llPointGroup; // 点控件的组 privateintpreviousPosition =0; // viewpager选中的前一个position privatebooleanisStop =false;// 控制循环的子线程是否停止
privateHandler handler =newHandler(){
@Override publicvoidhandleMessage(Message msg) { super.handleMessage(msg);
mViewPager.setCurrentItem(mViewPager.getCurrentItem() +1); } };
@Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
initView();
newThread(newRunnable() {
@Override publicvoidrun() { // 每两秒钟向主线程发送一条消息, 切换viewpager的界面 while(!isStop) { SystemClock.sleep(2000);
handler.sendEmptyMessage(0); } Log.i(TAG,"循环线程停止了"); }}).start(); }
@Override protectedvoidonDestroy() { isStop =true; super.onDestroy(); }
privatevoidinitView() { mViewPager = (ViewPager) findViewById(R.id.viewpager); llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group); tvImageDescription = (TextView) findViewById(R.id.tv_image_description);
imageViewList =newArrayList
ImageView iv; View pointView; LayoutParams params; for(inti =0; i < imageResIDs.length; i++) { iv =newImageView(this); iv.setBackgroundResource(imageResIDs[i]); imageViewList.add(iv);
// 根据图片添加点 pointView =newView(this); params =newLayoutParams(5,5); params.leftMargin =5; pointView.setLayoutParams(params); pointView.setEnabled(false); pointView.setBackgroundResource(R.drawable.point_bg); llPointGroup.addView(pointView); }
MyPagerAdapter mAdapter =newMyPagerAdapter(); mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(this);
intitem = (Integer.MAX_VALUE /2) - ((Integer.MAX_VALUE /2) % imageViewList.size()); mViewPager.setCurrentItem(item); // 设置当前选中的item的position
tvImageDescription.setText(imageDescriptions[previousPosition]); llPointGroup.getChildAt(previousPosition).setEnabled(true);// 第一点被选中 }
classMyPagerAdapterextendsPagerAdapter {
@Override publicintgetCount() { returnInteger.MAX_VALUE; }
/** * 移动的对象和进来的对象如果是同一个就返回true, 代表复用view对象 * false 使用object对象 */ @Override publicbooleanisViewFromObject(View arg0, Object arg1) { returnarg0 == arg1; }
/** * 需要销毁的对象的position传进来 */ @Override publicvoiddestroyItem(ViewGroup container,intposition, Object object) { // 移除掉指定position的对象 mViewPager.removeView(imageViewList.get(position % imageViewList.size())); }
/** * 加载position位置的view对象 */ @Override publicObject instantiateItem(ViewGroup container,intposition) { // 添加指定position的对象 mViewPager.addView(imageViewList.get(position % imageViewList.size())); returnimageViewList.get(position % imageViewList.size()); } }
@Override publicvoidonPageScrollStateChanged(intarg0) { // TODO Auto-generated method stub
}
@Override publicvoidonPageScrolled(intarg0,floatarg1,intarg2) { // TODO Auto-generated method stub
}
/** * 当viewpager页面切换时回调 * @param position 就是当前显示的page页 */ @Override publicvoidonPageSelected(intposition) { tvImageDescription.setText(imageDescriptions[position % imageViewList.size()]); llPointGroup.getChildAt(position % imageViewList.size()).setEnabled(true); llPointGroup.getChildAt(previousPosition).setEnabled(false);
previousPosition = position % imageViewList.size(); } } |
-
上一个: 花源怎么组建团队?花源怎么发布信息?
-
下一个: 心意贷怎么样?心意贷app功能介绍
相关文章
- Android实现图片拖动效果 06-02
- Android编程实现图片透明的方法 05-31
- Android打开相册如何选择单张图片 05-12
- 如何给Android中的按钮添加图片功能 04-24
- Android 实现局部图片滑动指引效果 03-05
- android中利用ImageView 图片循环播放 04-26