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

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

android輪播圖組件的制作方法

瀏覽:53日期: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(); /** 觸摸時當前的點 **/ 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現(xiàn)在進行的是本控件的操作,不要對我的操作進行干擾 getParent().requestDisallowInterceptTouchEvent(true);}if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //此句代碼是為了通知他的父ViewPager現(xiàn)在進行的是本控件的操作,不要對我的操作進行干擾 getParent().requestDisallowInterceptTouchEvent(true);}if(arg0.getAction() == MotionEvent.ACTION_UP || arg0.getAction() == MotionEvent.ACTION_CANCEL){ //在up時判斷是否按下和松手的坐標為一個點 //如果是一個點,將執(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é)習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
福利精品一区| 国产不卡精品| 亚洲手机视频| 99久久激情| 在线日韩欧美| 欧美日韩国产一区精品一区| 蜜桃视频在线网站| 欧美精品日日操| 久久一区二区三区喷水| 国产在线成人| 久久亚洲美女| 日韩一区二区三区高清在线观看| 天堂av一区| 国产欧美自拍| 精品少妇av| 国产精品高颜值在线观看| 色乱码一区二区三区网站| 日韩激情一区| 99国产精品久久久久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲91在线| 国产精品一二| 成人影视亚洲图片在线| 久久视频国产| 亚洲精品在线二区| 欧美国产日本| 91精品国产乱码久久久久久久| 精品91久久久久| 丝袜美腿高跟呻吟高潮一区| 伊人精品视频| 婷婷成人av| 麻豆精品视频在线观看| 伊伊综合在线| 午夜亚洲精品| 久久超级碰碰| 色网在线免费观看| 在线日韩中文| 日韩欧美精品一区二区综合视频| 国产免费播放一区二区| 日韩av福利| 亚洲精品少妇| 四虎国产精品免费观看| 在线亚洲精品| 欧美日韩伊人| 欧美一区二区三区高清视频| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品白丝一区二区三区| 99视频精品全部免费在线视频| 亚洲一级大片| 国产一区二区三区91| 怡红院精品视频在线观看极品| 亚洲精品在线国产| 首页国产精品| 四虎国产精品免费久久| 在线天堂资源www在线污| 免费看精品久久片| 国产成人久久精品一区二区三区| 国产精品毛片一区二区三区| 精品国产亚洲一区二区三区大结局 | 日韩中文字幕不卡| 精品美女视频| 蜜桃av一区二区| 日韩成人精品一区二区| 日韩一区二区三区精品| 精品久久久久久久| 日本v片在线高清不卡在线观看| 精精国产xxxx视频在线播放| 91欧美精品| 在线一区视频| 欧美日韩国产v| 国产精品欧美日韩一区| 日韩中文字幕一区二区三区| 成人日韩在线| 精品国产亚洲一区二区三区在线 | 免费av一区| 麻豆精品99| 最新国产精品视频| 亲子伦视频一区二区三区| 国产精品永久| 蜜臀久久99精品久久久久久9| 欧美日韩在线二区| 久久久久久一区二区| 日韩精品免费一区二区夜夜嗨| 欧美日韩一区二区三区视频播放| 国产一区二区视频在线看| 久久国产人妖系列| 在线亚洲成人| 欧美日韩中文字幕一区二区三区| 精品视频一区二区三区在线观看 | 精品一区二区三区四区五区| 亚洲aa在线| 天堂va蜜桃一区二区三区| 久久精品二区三区| 国产一二在线播放| 欧美激情91| 成人精品亚洲| 人人草在线视频| 国模大尺度视频一区二区| 国产精品一卡| 国产精选一区| 国产精品入口久久| 欧美日韩一区二区三区四区在线观看| 蜜臀av国产精品久久久久| 中文一区二区| 日韩午夜黄色| 91久久国产| 国产一区观看| 亚洲天堂久久| 免费精品国产| 婷婷久久一区| 99视频精品全部免费在线视频| 蜜桃成人精品| 美女网站视频一区| 精品日韩视频| 欧美/亚洲一区| 国产精品88久久久久久| 五月婷婷亚洲| 日韩视频精品在线观看| 亚洲激情精品| 先锋影音久久久| 亚洲专区在线| 亚洲一区二区小说| 亚洲精品在线国产| 日本a级不卡| 国产精品久久久久久久久久齐齐 | 不卡专区在线| 在线中文字幕播放| 久久久久蜜桃| 五月精品视频| 亚洲深夜福利在线观看| 日韩欧美激情| 国产精品欧美三级在线观看| 欧美激情亚洲| 日韩在线第七页| 欧美特黄一区| 亚洲精品日韩久久| 国产精品久久久网站| 97精品国产一区二区三区| 成人日韩在线| 亚洲免费在线| 欧美午夜三级| 精品视频在线一区二区在线| 国产精品字幕| 水蜜桃久久夜色精品一区的特点 | 日韩一区二区三区免费播放| 精品视频91| 久久亚洲影院| 88久久精品| 麻豆成人91精品二区三区| www.九色在线| 在线亚洲国产精品网站| 日本午夜精品久久久久| 国产成人久久| 亚洲激情婷婷| 日韩激情网站| 国模精品一区| 黄色日韩在线| 国产精品黄色| 欧美日韩中文一区二区| 日韩欧美中文字幕一区二区三区| 国产精品17p| 亚洲大片在线| 日韩高清一级| 国产一区丝袜| 性欧美长视频| 久久婷婷国产| 最新亚洲一区| 久久香蕉网站| 久久xxxx| 精品久久在线| 最新亚洲一区| 久久精品资源| 国产精品美女久久久| 国产精品久久久久av蜜臀| 成人精品亚洲| 亚洲精品在线二区| 一区二区三区四区日本视频| 日韩精品一二区| 成人日韩av| 蜜臀91精品一区二区三区| 精品91福利视频| 天堂va蜜桃一区二区三区| 国产一区二区三区四区| 日韩中文字幕麻豆| 日韩电影免费网址| 日韩精品视频在线看| 久久久久国产精品一区二区| 97精品久久| 亚洲高清久久| 免费亚洲婷婷| 黄色成人精品网站| 国产a久久精品一区二区三区| 男女精品网站| 夜鲁夜鲁夜鲁视频在线播放| 欧美一级网站| aa亚洲婷婷| 日韩精品dvd| 国产精品玖玖玖在线资源| 乱人伦精品视频在线观看| 国产一区二区三区不卡av|