Android 如何实现 焦点图的 无线循环滑动的状态?

参考网址:

原本的实现原理: 这里是一种模拟方式 实现的 “无线的循环”, 其实并不是 真正意义上的无线循环。 而是 设置的值很大,用于 当做 无线循环。

代码:

package stu.hades;import android.content.Context;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import com.example.hadesviewpagerdemo.R;public class MyViewPager extends ViewPager {protected Context mContext = null; protected ViewPager viewPager = null;//1、定义图片资源数组,有几个就写几个,也可以动态填充 public static int[] imageResId = new int[] {R.drawable.aaa,R.drawable.aab, R.drawable.aac,R.drawable.aad};//2、初始化一些参数 public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);this.mContext = context;viewPager = this; }//3、视图初始化后配置适配器和监听@Overrideprotected void onFinishInflate() {super.onFinishInflate();viewPager.setAdapter(new MyAdapter(mContext));//设定启示位置,设这么大,以便可以左循环100000次,应该没有人滑动这么频繁吧!viewPager.setCurrentItem(100000 * imageResId.length);viewPager.setOnPageChangeListener(new MyPageChangeListener());}//3、图片更改监听器private class MyPageChangeListener implements OnPageChangeListener {protected int oldPosition = 0;//下面里是显示当前图片位置的圈圈,这里是个参考,大家可以自己写,,即便注释不影响滑动public void onPageSelected(int position) {//LinearLayout image_viewpager_circle = (LinearLayout) ((RelativeLayout) viewPager.getParent()).findViewById(R.id.main_image_viewpager_circle);//((ImageView) image_viewpager_circle.getChildAt(oldPosition)).setImageResource(R.drawable.dot_normal);//((ImageView) image_viewpager_circle.getChildAt(position% imageResId.length)).setImageResource(R.drawable.dot_focused);oldPosition = position % imageResId.length;}public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}}@Overrideprotected void onMeasure(int arg0, int arg1) {super.onMeasure(arg0, arg1);}}

2 adapter

package stu.hades;import android.content.Context;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;public class MyAdapter extends PagerAdapter {public Context mContext;public MyAdapter(Context mContext) {this.mContext = mContext;}// 给适配设定元素数最大值,可以无限右滑动,左滑动不能超过100000次@Overridepublic int getCount() {return Integer.MAX_VALUE;}@Overridepublic int getItemPosition(Object object) {// TODO Auto-generated method stubreturn super.getItemPosition(object);}// 这个大家都懂的,用法可以百度或者OSCHINA一下,我白话文:每次初始化当前视图和左右两侧的视图@Overridepublic Object instantiateItem(View arg0, int position) {// TODO Auto-generated method stubint posi = position % MyViewPager.imageResId.length;// 每次添加新视图,虽然有点耗资源,但不会有冲突,并且在视图切换过程中,会销毁无用的视图。ImageView xImageView = new ImageView(mContext);xImageView.setBackgroundResource(MyViewPager.imageResId[posi]);android.view.ViewGroup.LayoutParams para = new android.view.ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);xImageView.setAdjustViewBounds(true);xImageView.setLayoutParams(para);((ViewPager) arg0).addView(xImageView, 0);return xImageView;}@Overridepublic void destroyItem(View arg0, int position, Object arg2) {// 销毁不需要的视图((ViewPager) arg0).removeView((View) arg2);}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}@Overridepublic void finishUpdate(View arg0) {}}代码网址:

何愁没有快乐的泉溪在歌唱,何愁没有快乐的鲜花绽放!

Android 如何实现 焦点图的 无线循环滑动的状态?

相关文章:

你感兴趣的文章:

标签云: