电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

android輪播圖組件的制作方法

瀏覽:2日期: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
相關文章:
主站蜘蛛池模板: 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 | 好杂志网-首页| SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 包塑软管|金属软管|包塑金属软管-闵彬管业 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 塑料检查井_双扣聚氯乙烯增强管_双壁波纹管-河南中盈塑料制品有限公司 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 东亚液氮罐-液氮生物容器-乐山市东亚机电工贸有限公司 | 郑州墨香品牌设计公司|品牌全案VI设计公司 | 创客匠人-让IP变现不走弯路 | 企典软件一站式企业管理平台,可私有、本地化部署!在线CRM客户关系管理系统|移动办公OA管理系统|HR人事管理系统|人力 | 压砖机_电动螺旋压力机_粉末成型压力机_郑州华隆机械tel_0371-60121717 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 山东钢格板|栅格板生产厂家供应商-日照森亿钢格板有限公司 | 双效节能浓缩器-热回流提取浓缩机组-温州市利宏机械 | 学考网学历中心| 硬齿面减速机_厂家-山东安吉富传动设备股份有限公司 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 华溶溶出仪-Memmert稳定箱-上海协烁仪器科技有限公司 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 太空舱_民宿太空舱厂家_移动房屋太空舱价格-豪品建筑 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 金库门,金库房,金库门厂家,金库门价格-河北特旺柜业有限公司 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 大型低温冷却液循环泵-低温水槽冷阱「厂家品牌」京华仪器_京华仪器 | 旋转滴界面张力仪(张力测定仪器)-百科| 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 杭州公司变更法人-代理记账收费价格-公司注销代办_杭州福道财务管理咨询有限公司 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 |