溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決Android ViewPager自定義輪播圖播放沖突

發(fā)布時(shí)間:2021-09-28 09:22:53 來(lái)源:億速云 閱讀:110 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“如何解決Android ViewPager自定義輪播圖播放沖突”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何解決Android ViewPager自定義輪播圖播放沖突”吧!

一定要將ArrayList集合&Handler機(jī)制傳到適配器,否則無(wú)法完成展示,也解決不了滑動(dòng)沖突,代碼有點(diǎn)多,但是它通俗易懂啊

layout布局內(nèi)寫法:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <android.support.v4.view.ViewPager
        android:id="@+id/pager01"
        android:layout_width="match_parent"
        android:layout_height="300dp" />
 
    <RadioGroup
        android:id="@+id/radioGroup"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    </RadioGroup>
 
</LinearLayout>

Activity內(nèi)寫法:

public class Frag_01 extends Fragment {
 private RadioGroup radioGroup;
 private ViewPager pager;
 
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.frag_01, container, false);
  // 找Viewpager控件
  radioGroup = (RadioGroup) view.findViewById(R.id.radioGroup);
  pager = (ViewPager) view.findViewById(R.id.pager01);
  
  // 圖片數(shù)據(jù)自擬-->drawable文件夾下
  int arr[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,
    R.drawable.a4, R.drawable.a5 };
  final ArrayList<ImageView> list = new ArrayList<ImageView>();
  for (int i = 0; i < arr.length; i++) {
   ImageView imageView = new ImageView(getActivity());
   imageView.setImageResource(arr[i]);
   list.add(imageView);
   // 生成小圓點(diǎn)
   RadioButton radioButton = new RadioButton(getActivity());
   radioGroup.addView(radioButton);
  }
  
  // 默認(rèn)選中第一個(gè)
  radioGroup.check(radioGroup.getChildAt(0).getId());
    
  // 適配器
  pager.setAdapter(new MyPagerAdapter(list, handler));
  
  // 頁(yè)面切換監(jiān)聽
  pager.setOnPageChangeListener(new OnPageChangeListener() {
 
   @Override
   public void onPageSelected(int arg0) {
    //根據(jù)頁(yè)面索引控制小圓點(diǎn)切換
    arg0 %= list.size();
    radioGroup.check(radioGroup.getChildAt(arg0).getId());
 
   }
 
   @Override
   public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub
 
   }
 
   @Override
   public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub
 
   }
  });
  //handler發(fā)送消息
  handler.sendEmptyMessageDelayed(0, 3000);
  return view;
 }
 
        //Handler機(jī)制-----------------------------------------
 
 Handler handler = new Handler() {
  public void handleMessage(android.os.Message msg) {
   switch (msg.what) {
   case 0:
    //獲取到下一頁(yè)的條目--->賦值給當(dāng)前條目
    int currentItem = pager.getCurrentItem() + 1;
    pager.setCurrentItem(currentItem);
    handler.sendEmptyMessageDelayed(0, 3000);
    break;
 
   default:
    break;
   }
  };
 };
}

PagerAdapter適配器的寫法:(內(nèi)含滑動(dòng)沖突解決方案)

public class MyPagerAdapter extends PagerAdapter {
 
 private ArrayList<ImageView> list;
 private Handler handler;
 //構(gòu)造
 public MyPagerAdapter(ArrayList<ImageView> list, Handler handler) {
  super();
  this.list = list;
  this.handler = handler;
 }
 
 @Override
 public int getCount() {
  // 設(shè)置最大值
  return Integer.MAX_VALUE;
 }
 
 @Override
 public boolean isViewFromObject(View arg0, Object arg1) {
  //當(dāng)前視圖和新加載視圖判斷-->為真才能去銷毀
  return arg0 == arg1;
 }
 
 // 添加視圖
        // ----該方法內(nèi)包含滑動(dòng)沖突----
 @Override
 public Object instantiateItem(ViewGroup container, int position) {
  position %= list.size();
  ImageView imageView = list.get(position);
  imageView.setOnTouchListener(new OnTouchListener() {
 
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    // 獲取事件
    int action = event.getAction();
    switch (action) {
    case MotionEvent.ACTION_MOVE:// 滑動(dòng)
     handler.removeCallbacksAndMessages(null);
     break;
    case MotionEvent.ACTION_DOWN:// 按下
     handler.removeCallbacksAndMessages(null);
     break;
    case MotionEvent.ACTION_CANCEL:// 非人為操作
     handler.sendEmptyMessageDelayed(0, 3000);
     break;
    case MotionEvent.ACTION_UP:// 抬起
     handler.sendEmptyMessageDelayed(0, 3000);
     break;
    }
    return true;
   }
  });
  //獲取的圖片存進(jìn)容器
  container.addView(imageView);
  return imageView;
 }
 
 // 銷毀視圖
 @Override
 public void destroyItem(ViewGroup container, int position, Object object) {
  container.removeView((View) object);
 }
}

感謝各位的閱讀,以上就是“如何解決Android ViewPager自定義輪播圖播放沖突”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何解決Android ViewPager自定義輪播圖播放沖突這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI