自定义View
package com.example.administrator.monthlytest.customView; import android.content.Context; import android.os.Handler; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.example.administrator.monthlytest.bean.HomeBean; import java.util.List; /** * created by 左 at 2018/06/01 */ public class SowingViewPrage extends ViewPager { private List<HomeBean.DataBean> list; private Context context; private Handler handler = new Handler(); private Runnable runnable; private int index = 100; public SowingViewPrage(@NonNull Context context) { this(context, null); } public SowingViewPrage(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); this.context = context; } /** * 定义一个接收数据的方法 */ public void setAdapterData(List<HomeBean.DataBean> list) { this.list = list; //创建适配器,自己调用自己 MyPagerAdapter pagerAdapters = new MyPagerAdapter(); this.setAdapter(pagerAdapters); runnable = new Runnable() { @Override public void run() { SowingViewPrage.this.setCurrentItem(index); index++; handler.postDelayed(runnable, 3000); } }; handler.post(runnable); this.addOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { index = position; } @Override public void onPageScrollStateChanged(int state) { } }); } /** * 停止轮播 */ public void stopMotion() { handler.removeCallbacks(runnable); } /** * 再次开启轮播 */ public void startMotion() { handler.postDelayed(runnable, 3000); } /** * 内部类,展示轮播图 */ class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, final int position) { ImageView image = new ImageView(context); image.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //可以在这点击图片跳转 Toast.makeText(context, "." + position%list.size(), Toast.LENGTH_SHORT).show(); } }); //显示图片 Glide.with(context).load(list.get(position % list.size()).getIcon()).into(image); container.addView(image); return image; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } } /** * 处理按下时不自动轮播,松开后自动轮播 */ @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // 手指按下移除消息 stopMotion(); break; case MotionEvent.ACTION_MOVE: break; // 细节,触摸可能在控件外才抬起,此时只能监听到取消事件 case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: startMotion(); break; } return super.onTouchEvent(ev); } /** * 自定义点击事件 */ private interface OnImgClickListener{ void onClick(int i); } }
调用方法比较简单:
自定义控件.setAdapterData(list);
传入一个图片的集合就行,传入网址,需要在内部更改。
需要根据Activity的生命周期,调用停止播放,停止的方法。