ViewPager+Handler实现图片自动轮播的效果
2016-01-16 19:33
627 查看
效果图就不贴了,最下面有源码,用AndroidStudio写的。
分析来也就两种状态,暂停轮播和开始轮播,这里为了避免bug,有一个记录页号的TAG
布局是最简单的。只有一个viewpager,在V4包下面
Adapter也是单独写的一个java类
Handler为了方便直接抽取出来写一个工具类
代码也是最基础的一些东西,看起来也不费劲。
点击下载源码
分析来也就两种状态,暂停轮播和开始轮播,这里为了避免bug,有一个记录页号的TAG
布局是最简单的。只有一个viewpager,在V4包下面
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ViewPager_vp" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager>简单的activity
package demo.viewpager; import android.os.Bundle; import android.os.Message; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import demo.viewpager.Utils.ViewPagerHandlerUtils; import demo.viewpager.adapter.ViewPagerAdapter; /** * Created by 12406 on 2016/1/16. */ public class ViewPagerActivity extends AppCompatActivity { private ViewPagerAdapter adapter; private ViewPager viewPager; private ViewPagerHandlerUtils handlerUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_viewpager); viewPager = (ViewPager) findViewById(R.id.ViewPager_vp); init(); } private void init() { handlerUtils = new ViewPagerHandlerUtils(viewPager); handlerUtils.sendEmptyMessageDelayed(handlerUtils.MSG_UPDATE, handlerUtils.MSG_DELAY); adapter = new ViewPagerAdapter(this); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { handlerUtils.sendMessage(Message.obtain(handlerUtils, handlerUtils.MSG_PAGE, position, 0)); } @Override public void onPageScrollStateChanged(int state) { switch (state) { case ViewPager.SCROLL_STATE_DRAGGING: handlerUtils.sendEmptyMessage(handlerUtils.MSG_KEEP); break; case ViewPager.SCROLL_STATE_IDLE: handlerUtils.sendEmptyMessageDelayed(handlerUtils.MSG_UPDATE, handlerUtils.MSG_DELAY); } } }); } }
Adapter也是单独写的一个java类
package demo.viewpager.adapter; import android.app.Activity; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.Toast; import demo.viewpager.R; /** * Created by 12406 on 2016/1/16. */ public class ViewPagerAdapter extends PagerAdapter { private Activity activity; private int[] imager = new int[]{R.drawable.item1, R.drawable.item2, R.drawable.item3, R.drawable.item4, R.drawable.item5, R.drawable.item6}; public ViewPagerAdapter(Activity activity) { this.activity = activity; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { position %= imager.length; if (position < 0) { position = imager.length + position; } ImageView imageView = new ImageView(activity); imageView.setImageResource(imager[position]); // imageView.setScaleType(ImageView.ScaleType.FIT_XY); final int finalPosition = position; imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(activity, "第" + finalPosition + "个被点击了", Toast.LENGTH_SHORT).show(); } }); container.addView(imageView); return imageView; } }
Handler为了方便直接抽取出来写一个工具类
package demo.viewpager.Utils; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; public class ViewPagerHandlerUtils extends Handler { /** * 请求更新显示的ImageView。 */ public static final int MSG_UPDATE = 1; /** * 请求暂停轮播。 */ public static final int MSG_KEEP = 2; /** * 请求恢复轮播。 */ public static final int MSG_BREAK = 3; /** * 记录最新的页号 */ public static final int MSG_PAGE = 4; //轮播间隔时间 public static final long MSG_DELAY = 2000; private ViewPager mViewPager; private int currentItem = 0; public ViewPagerHandlerUtils(ViewPager viewPager) { mViewPager = viewPager; } @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (mViewPager == null) { return; } if (hasMessages(MSG_UPDATE)) { removeMessages(MSG_UPDATE); } switch (msg.what) { case MSG_UPDATE: currentItem++; mViewPager.setCurrentItem(currentItem); sendEmptyMessageDelayed(MSG_UPDATE, MSG_DELAY); break; case MSG_KEEP: break; case MSG_BREAK: sendEmptyMessageDelayed(MSG_UPDATE, MSG_DELAY); break; case MSG_PAGE: currentItem = msg.arg1; break; default: sendEmptyMessageDelayed(MSG_UPDATE, MSG_DELAY); break; } } }
代码也是最基础的一些东西,看起来也不费劲。
点击下载源码
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories