亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

android輪播圖組件的制作方法

瀏覽:5日期:2023-12-14 14:43:23

本文實例為大家分享了android輪播圖組件的制作方法,供大家參考,具體內容如下

BannerLayout

package com.coral3.common_module.components;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.viewpager.widget.PagerAdapter;import androidx.viewpager.widget.ViewPager;import com.coral3.common_module.R;import com.coral3.common_module.utils.LogUtil;import com.coral3.common_module.viewPager.ChildViewPager;import java.util.ArrayList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;public class BannerLayout extends LinearLayout { private Context mContext; private View view; private ChildViewPager viewPager; private ImageView indicator; private ImageView[] indicators; private Boolean isContinue = true; private ViewGroup group; private AtomicInteger index = new AtomicInteger(); private Handler handler = new Handler(new Handler.Callback(){@Overridepublic boolean handleMessage(Message message) { viewPager.setCurrentItem(message.what); return false;} }); public BannerLayout(Context context, @Nullable AttributeSet attrs) {super(context, attrs);mContext = context;initView();initListener(); } private void initView(){view = LayoutInflater.from(mContext).inflate(R.layout.layout_banner, this);group = view.findViewById(R.id.view_indicators);viewPager = view.findViewById(R.id.view_banners);// 動態加入圖片List<View> listPics = new ArrayList<>();ImageView img1 = new ImageView(mContext);img1.setBackgroundResource(R.drawable.banner1);listPics.add(img1);ImageView img2 = new ImageView(mContext);img2.setBackgroundResource(R.drawable.banner2);listPics.add(img2);ImageView img3 = new ImageView(mContext);img3.setBackgroundResource(R.drawable.banner3);listPics.add(img3);ImageView img4 = new ImageView(mContext);img4.setBackgroundResource(R.drawable.banner4);listPics.add(img4);ImageView img5 = new ImageView(mContext);img5.setBackgroundResource(R.drawable.banner4);listPics.add(0, img5);ImageView img0 = new ImageView(mContext);img0.setBackgroundResource(R.drawable.banner1);listPics.add(img0);//動態加入指示器indicators = new ImageView[listPics.size()];for(int i = 0; i < indicators.length; i++){ indicator = new ImageView(mContext); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(15, 15); layoutParams.setMargins(0, 0, 10, 0); indicator.setLayoutParams(layoutParams); indicators[i] = indicator; if(i == 1){indicators[i].setBackgroundResource(R.drawable.shape_banner_checked); }else{indicators[i].setBackgroundResource(R.drawable.shape_banner_unchecked); } if(i == 0 || i == 5){indicators[i].setVisibility(View.INVISIBLE); } group.addView(indicators[i]);}viewPager.setAdapter(new MyPagerAdapter(listPics));index.incrementAndGet();// 輪播new Thread(new Runnable() { @Override public void run() {while (true){ if(isContinue){handler.sendEmptyMessage(index.get());whatOption(); }} }}).start(); } private void initListener(){// 設置監聽器viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {LogUtil.d(positionOffset + '-' + positionOffsetPixels);// 無縫滾動均滑//if(positionOffset == 0.0){// LogUtil.d(position + '');// if(position == 5) {//viewPager.setCurrentItem(1, false);// }// if(position == 0) {//viewPager.setCurrentItem(4, false);// }//} } @Override public void onPageSelected(int position) {index.getAndSet(position);if(position == 5) { viewPager.setCurrentItem(1, false);}if(position == 0) { viewPager.setCurrentItem(4, false);}for(int i = 0; i < indicators.length; i++){ if(i == index.get()){indicators[i].setBackgroundResource(R.drawable.shape_banner_checked); }else{indicators[i].setBackgroundResource(R.drawable.shape_banner_unchecked); }}if(position == 0) indicators[4].setBackgroundResource(R.drawable.shape_banner_checked);if(position == 5) indicators[1].setBackgroundResource(R.drawable.shape_banner_checked); } @Override public void onPageScrollStateChanged(int state) {}});// 設置觸摸時停止定時viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) {switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN:isContinue = false;break; case MotionEvent.ACTION_UP:isContinue = true;break;}return false; }}); } class MyPagerAdapter extends PagerAdapter {private List<View> listView;@Overridepublic int getCount() { return listView.size();}public MyPagerAdapter(List<View> listView){ this.listView = listView;}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object;}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) { container.addView(listView.get(position)); return listView.get(position);}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView(listView.get(position));} } private void whatOption(){index.incrementAndGet();if(index.get() > indicators.length - 2){ index.getAndAdd(-4);}try { Thread.sleep(3000);} catch (InterruptedException e) { e.printStackTrace();} }}

layout_banner

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:orientation='vertical' android:layout_height='match_parent'> <RelativeLayoutandroid:layout_width='match_parent'android:layout_height='wrap_content'><com.coral3.common_module.viewPager.ChildViewPager android: android:layout_width='match_parent' android:layout_height='200dp'/><LinearLayout android: android:layout_below='@+id/view_banners' android:gravity='center' android:layout_marginTop='-15dp' android:layout_width='match_parent' android:layout_height='wrap_content' android:orientation='horizontal' /> </RelativeLayout></LinearLayout>

ChildViewPager

package com.coral3.common_module.viewPager;import android.content.Context;import android.graphics.PointF;import android.util.AttributeSet;import android.view.MotionEvent;import androidx.viewpager.widget.ViewPager;public class ChildViewPager extends ViewPager { /** 觸摸時按下的點 **/ PointF downP = new PointF(); /** 觸摸時當前的點 **/ PointF curP = new PointF(); public ChildViewPager(Context context) {super(context); } public ChildViewPager(Context context, AttributeSet attrs) {super(context, attrs); } private static final String TAG = 'ChildViewpager'; @Override public boolean onTouchEvent(MotionEvent arg0) {//每次進行onTouch事件都記錄當前的按下的坐標if(getChildCount()<=1){ return super.onTouchEvent(arg0);}curP.x = arg0.getX();curP.y = arg0.getY();if(arg0.getAction() == MotionEvent.ACTION_DOWN){ //記錄按下時候的坐標 //切記不可用 downP = curP ,這樣在改變curP的時候,downP也會改變 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代碼是為了通知他的父ViewPager現在進行的是本控件的操作,不要對我的操作進行干擾 getParent().requestDisallowInterceptTouchEvent(true);}if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //此句代碼是為了通知他的父ViewPager現在進行的是本控件的操作,不要對我的操作進行干擾 getParent().requestDisallowInterceptTouchEvent(true);}if(arg0.getAction() == MotionEvent.ACTION_UP || arg0.getAction() == MotionEvent.ACTION_CANCEL){ //在up時判斷是否按下和松手的坐標為一個點 //如果是一個點,將執行點擊事件,這是我自己寫的點擊事件,而不是onclick getParent().requestDisallowInterceptTouchEvent(false); if(downP.x==curP.x && downP.y==curP.y){return true; }}super.onTouchEvent(arg0); //注意這句不能 return super.onTouchEvent(arg0); 否則觸發parent滑動return true; }}

使用

<com.coral3.common_module.components.BannerLayout android: android:layout_width='match_parent' android:layout_height='wrap_content'/>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
主站蜘蛛池模板: 秀人网福利视频在线观看 | 亚洲欧美精品一区 | 国产精品黄色大片 | 女性无套免费网站在线看 | 中文字幕日韩高清版毛片 | 天天久久综合网站 | 91精品国产高清在线入口 | 国产2021精品视频免费播放 | 乱人xxx国语对白91 | 欧美激情一级毛片在 | 日本黄色一级网站 | 美女精品在线 | 九九精品国产兔费观看久久 | 成人做爰www | 国产无遮挡色视频免费视频 | 国内女高中生一级毛片 | 免费的一级黄色片 | 狠狠色丁香婷婷久久综合不卡 | 日本韩国欧美在线观看 | 91在线区啪国自产网页 | 欧美福利一区二区三区 | 国产免费高清无需播放器 | 欧美日韩一区二区视频免费看 | 精品一区二区三区在线观看 | 亚洲视频在线观看免费 | 亚洲一级成人 | 亚洲精品视频免费 | 久爱www成人网免费视频 | 国产又黄又免费aaaa视频 | 求欧美精品网址 | 日韩精品a在线视频 | 男人狂躁女人下面视频免费看 | 久久国产精品久久久 | www一级片 | 国内视频在线 | 欧美精品一区二区在线观看播放 | 国产视频网站在线 | 午夜狠狠操 | 在线观看日韩欧美 | 国产小说 | 欧美在线观看日韩欧美在线观看 |