日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

android輪播圖組件的制作方法

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

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

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);// 動態(tài)加入圖片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);//動態(tài)加入指示器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(){// 設(shè)置監(jiān)聽器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) {}});// 設(shè)置觸摸時停止定時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(); /** 觸摸時當(dāng)前的點 **/ 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) {//每次進(jìn)行onTouch事件都記錄當(dāng)前的按下的坐標(biāo)if(getChildCount()<=1){ return super.onTouchEvent(arg0);}curP.x = arg0.getX();curP.y = arg0.getY();if(arg0.getAction() == MotionEvent.ACTION_DOWN){ //記錄按下時候的坐標(biāo) //切記不可用 downP = curP ,這樣在改變curP的時候,downP也會改變 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代碼是為了通知他的父ViewPager現(xiàn)在進(jìn)行的是本控件的操作,不要對我的操作進(jìn)行干擾 getParent().requestDisallowInterceptTouchEvent(true);}if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //此句代碼是為了通知他的父ViewPager現(xiàn)在進(jìn)行的是本控件的操作,不要對我的操作進(jìn)行干擾 getParent().requestDisallowInterceptTouchEvent(true);}if(arg0.getAction() == MotionEvent.ACTION_UP || arg0.getAction() == MotionEvent.ACTION_CANCEL){ //在up時判斷是否按下和松手的坐標(biāo)為一個點 //如果是一個點,將執(zhí)行點擊事件,這是我自己寫的點擊事件,而不是onclick getParent().requestDisallowInterceptTouchEvent(false); if(downP.x==curP.x && downP.y==curP.y){return true; }}super.onTouchEvent(arg0); //注意這句不能 return super.onTouchEvent(arg0); 否則觸發(fā)parent滑動return true; }}

使用

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品nxnn| 日韩一区二区三区免费视频| 国产精品一区二区av日韩在线| 男人操女人的视频在线观看欧美| 亚洲激情中文在线| 91久久视频| 亚洲色诱最新| 视频一区二区国产| 中文字幕免费一区二区| 综合色一区二区| 人人精品久久| 亚洲精品影视| 日韩国产91| 久久国产精品免费一区二区三区| 国产毛片一区二区三区| 国产黄色一区| 精品国产网站| 久久久国产亚洲精品| 国产精品7m凸凹视频分类| 激情91久久| 日韩亚洲在线| 午夜久久av| 日韩一区二区免费看| 国产91精品对白在线播放| 久久久久久美女精品| 久久亚洲国产| 四虎影视精品| 亚洲丝袜美腿一区| 蜜桃av一区| 视频一区欧美日韩| 亚洲精品动态| 都市激情国产精品| 人人爽香蕉精品| 成人在线黄色| 久久国产精品免费一区二区三区| 色婷婷色综合| 美女视频一区在线观看| 麻豆传媒一区二区三区| 在线看片国产福利你懂的| se01亚洲视频 | 国产精久久久| 国产精品一区二区美女视频免费看 | 亚洲综合婷婷| 国产日韩免费| 久久精品系列| 久久亚洲一区| 在线亚洲免费| 久久免费国产| 国户精品久久久久久久久久久不卡| 五月天综合网站| 日本aⅴ精品一区二区三区| 美女在线视频一区| 欧美一区二区三区高清视频 | 国产精品jk白丝蜜臀av小说| 精精国产xxxx视频在线播放| 欧美亚洲三区| 亚洲黄色影院| 日本在线不卡视频一二三区| 国产精品嫩草影院在线看| 久久精品人人| 国产精品巨作av| 日韩一区二区三免费高清在线观看 | 欧美精品福利| 另类中文字幕国产精品| 蜜桃av一区二区在线观看| 国产精品超碰| 亚洲一级网站| 日韩av网站在线观看| 国产在线观看www| 欧美亚洲精品在线| 国产日韩亚洲| 99视频精品| 精品深夜福利视频| 视频一区二区中文字幕| 91视频一区| 午夜精品福利影院| 99精品视频在线| 国产调教精品| 妖精视频成人观看www| 国产精品久久久久av蜜臀| 国产一区二区三区自拍| 国产日韩欧美一区在线| 日韩在线精品| 亚洲伊人影院| 日韩精品欧美大片| 久久天堂av| 国产黄色精品| 久久成人精品| 亚洲免费福利| 国产精品综合色区在线观看| 婷婷综合社区| 欧美xxxx中国| 奇米亚洲欧美| 一区在线视频观看| 国产第一亚洲| 日本国产欧美| 狠狠色狠狠色综合日日tαg| 黄色网一区二区| 日韩精品久久理论片| 日韩不卡视频在线观看| 国产精品一区三区在线观看| 在线亚洲国产精品网站| 欧美男人天堂| 欧美激情aⅴ一区二区三区| 亚洲三级av| 99国产精品视频免费观看一公开| 国产福利片在线观看| 国产精品一区二区三区av| 亚洲最大av| 99国产精品久久久久久久成人热| av资源中文在线| 免费亚洲一区| 久久国产视频网| 婷婷综合福利| 亚洲精品观看| 欧美特黄一区| 久久三级中文| 日韩不卡手机在线v区| 亚洲在线电影| 亚洲国产专区校园欧美| 精品黄色一级片| 国产精品久久久久久久久久白浆 | 亚洲永久精品唐人导航网址| 久久国产电影| 亚洲国产欧美日本视频| 精品欠久久久中文字幕加勒比| 日韩高清一区| 亚洲2区在线| 视频一区二区三区中文字幕| 日韩精品高清不卡| 视频一区二区三区入口| 在线亚洲欧美| 久久精品1区| 国产在线看片免费视频在线观看| 久草精品视频| 久久精品系列| 粉嫩av一区二区三区四区五区| 一区二区三区四区在线观看国产日韩| 久久激情一区| 久久精品国内一区二区三区| 国产探花在线精品一区二区| 日本成人在线一区| 亚洲精品在线国产| 午夜亚洲福利| 欧美日韩亚洲一区在线观看| 欧美日韩1区2区3区| 日本午夜免费一区二区 | 日产精品一区二区| 欧美国产美女| 国产精品久久久久av电视剧| 亚洲a在线视频| 999国产精品视频| 欧美福利在线| 久久福利精品| 日韩高清一区在线| 国产精品亚洲综合在线观看| 国产精品一区毛片| 成人精品高清在线视频| 天堂8中文在线最新版在线| 精品亚洲美女网站| 黄色日韩精品| 99视频+国产日韩欧美| 免费观看在线综合色| 天堂久久av| 麻豆久久久久久| 亚洲啊v在线| 91久久中文| 欧美一区自拍| 国产一区二区三区国产精品| 99国产精品免费视频观看| 国产高清不卡| 国产日韩专区| 国产精品av一区二区| 夜久久久久久| 91国内精品| 精品久久电影| 激情不卡一区二区三区视频在线| 日韩国产欧美| 免费日韩av| 国产欧美日韩综合一区在线播放| 国产一区二区三区久久| 国产专区一区| 欧美天堂一区二区| 欧产日产国产精品视频| 免费黄网站欧美| 精品久久久亚洲| 久久国产精品久久久久久电车| 欧美一区网站| 亚洲va在线| 国产亚洲人成a在线v网站| 亚洲va中文在线播放免费| 欧美日韩国产在线观看网站 | 精品一区二区男人吃奶| 欧美sss在线视频| 亚洲色图综合| 久久影院午夜精品| 亚洲精品一二| 日韩不卡一区| 影音国产精品| 久久精品凹凸全集|