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

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

Android實現輪播圖片效果

瀏覽:26日期:2022-09-21 11:32:36

本文實例為大家分享了Android實現輪播圖片效果的具體代碼,供大家參考,具體內容如下

一、原理

首先,將這些要輪播的圖片和一些文本分別放置在不同的數據集合中,程序啟動的時候默認顯示一組圖片和文本數據,然后啟動一個定時器,每隔一段時間便替換掉顯示的圖片和文本數據,同時加入一些動畫效果,已達到輪播的特效。同時,我們也要實現手指滑動圖片達到輪播的效果。

二、實現

1、程序啟動界面MainActivity

public class MainActivity extends AppCompatActivity implements ImageBannerFramLayout.FramLayoutLisenner{ private ImageBannerFramLayout mGroup; private int[] ids = new int[] { R.drawable.i1,//圖片資源1 R.drawable.i2,//圖片資源2 }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //計算當前手機寬度 DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int width = displayMetrics.widthPixels; mGroup = (ImageBannerFramLayout) findViewById(R.id.image_group); mGroup.setLisenner(this); List<Bitmap> list = new ArrayList<>(); for (int i = 0; i < ids.length; i++) { Bitmap bitmap = BitmapFactory.decodeResource(getResources(),ids[i]); list.add(bitmap); } mGroup.addBitmaps(list); } @Override public void chickImageIndex(int pos) { Toast.makeText(this,'索引值 = ' + pos,Toast.LENGTH_SHORT).show(); }}

2、新建包view下面新建兩個類

1)新建ImageBarnnerViewGroup類繼承自ViewGroup

public class ImageBarnnerViewGroup extends ViewGroup { private int children;//我們View Group的子視圖總個數 private int childwidth;//子視圖的寬度 private int childheight;//子視圖的高度 private int x;//此時的x的值代表的是第一次按下的位置的橫坐標,每一次移動過的過程中 移動之前的位置橫坐標 private int index = 0;//代表名為每張圖片的索引 private Scroller scroller; /** * 利用一個單擊變量開關進行判斷,離開屏幕的一瞬間判斷用戶的操作是點擊 */ private boolean isClick;//true的時候點擊事件,false的時候不是點擊事件 private ImageBarnnerLister lister; private ImageBarnnerViewGroupLisnner barnnerViewGroupLisnner; public ImageBarnnerLister getLister() { return lister; } public void setLister(ImageBarnnerLister lister) { this.lister = lister; } public ImageBarnnerViewGroupLisnner getBarnnerViewGroupLisnner() { return barnnerViewGroupLisnner; } public void setBarnnerViewGroupLisnner(ImageBarnnerViewGroupLisnner barnnerViewGroupLisnner) { this.barnnerViewGroupLisnner = barnnerViewGroupLisnner; } public interface ImageBarnnerLister { void chickImageIndex(int pos);//pos代表的是我們當前的圖片的具體索引值 } /** * 實現輪播圖底部圓點切換效果 * 自定義一個繼承自FragmenLayou布局,利用FragmeLayout布局特性 */ //自動輪播 private boolean isAuto = true;//默認情況下開啟輪播 private Timer timer = new Timer(); private TimerTask timerTask; @SuppressLint('HandlerLeak') private android.os.Handler autohandler = new android.os.Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) {case 0://我們需要圖片的自動輪播 if (++index >= children) {//如果是最后一張圖片,從第一張開始 index = 0; } scrollTo(childwidth * index,0); barnnerViewGroupLisnner.selectImage(index); break;default: } } }; private void startAuto() { isAuto = true; } private void stopAuto() { isAuto = false; } /** * 采用Timer,TimerTask,Handler三者結合的方式來實現自動輪播 */ public ImageBarnnerViewGroup(Context context) { super(context); initObj(); } public ImageBarnnerViewGroup(Context context, AttributeSet attrs) { super(context, attrs); initObj(); } public ImageBarnnerViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); initObj(); } private void initObj() { scroller = new Scroller(getContext()); timerTask = new TimerTask() { @Override public void run() {if (isAuto) {//開啟輪播圖 autohandler.sendEmptyMessage(0);} } }; timer.schedule(timerTask,100,3000); } @Override public void computeScroll() { super.computeScroll(); if (scroller.computeScrollOffset()) { scrollTo(scroller.getCurrX(),0); invalidate();//重繪 } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //1.求出子視圖的個數 children = getChildCount();//我們可以知道自試圖的個數 if (0 == children) { setMeasuredDimension(0,0); } else { measureChildren(widthMeasureSpec, heightMeasureSpec); //此時我們以第一個子視圖=為基準,也就是說我們的View Group View view = getChildAt(0); childwidth = view.getMeasuredWidth(); childheight = view.getMeasuredHeight(); int width = view.getMeasuredWidth() * children; setMeasuredDimension(width,childheight); } //2.測量子視圖的寬度和高度 //3.根據子視圖的狂賭和高度,求出該ViewGroup的寬度和高度 } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); } /** * 用兩種方式來實現輪播圖的手動輪播 * 1,利用scrollTo,scrollBy 完成輪播圖的手動輪播 * 1,利用Scroller 對象完成輪播圖的手動效果 * @param event * @return */ @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://表示用戶按下的一瞬間stopAuto();//停止圖片輪播if (!scroller.isFinished()) { scroller.abortAnimation();}isClick = true;x=(int)event.getX();break; case MotionEvent.ACTION_MOVE://表示用戶按下之后在屏幕上移動的過程int moveX = (int) event.getX();int distance = moveX - x;scrollBy(-distance,0);x = moveX;isClick = false;break; case MotionEvent.ACTION_UP://標識的是用戶抬起的一瞬間int scrollX = getScrollX();index = (scrollX + childwidth / 2) / childwidth;if (index < 0) { //已經滑動到了最左邊 index = 0;} else if (index > children - 1) {//說明已經滑動到了最右邊 index = children - 1;} if (isClick) { //點擊事件 lister.chickImageIndex(index);} else { int dx = index * childwidth - scrollX; scroller.startScroll(scrollX,0,dx,0); postInvalidate(); barnnerViewGroupLisnner.selectImage(index);}startAuto();//開啟圖片輪播break; default: } return true; //返回true的目的是告訴該View Group容器的父View 我們已經處理好了該事件 } @Override protected void onLayout(boolean b, int i, int i1, int i2, int i3) { if (b) { int lefrMargin = 0; for (int j = 0; j < children; j++) {View view = getChildAt(j);view.layout(lefrMargin,0,lefrMargin + childwidth,childheight);lefrMargin += childwidth; } } } public interface ImageBarnnerViewGroupLisnner{ void selectImage(int index); }}

2)新建ImageBannerFramLayout類繼承自FrameLayout實現兩個接口

public class ImageBannerFramLayout extends FrameLayout implements ImageBarnnerViewGroup.ImageBarnnerViewGroupLisnner,ImageBarnnerViewGroup.ImageBarnnerLister{ private ImageBarnnerViewGroup imageBarnnerViewGroup; private LinearLayout linearLayout; private FramLayoutLisenner lisenner; public FramLayoutLisenner getLisenner() { return lisenner; } public void setLisenner(FramLayoutLisenner lisenner) { this.lisenner = lisenner; } public ImageBannerFramLayout(@NonNull Context context) { super(context); initImageBarnnerViewGroup(); initDotLinearlayout(); } public ImageBannerFramLayout(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); initImageBarnnerViewGroup(); initDotLinearlayout(); } public ImageBannerFramLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initImageBarnnerViewGroup(); initDotLinearlayout(); } public void addBitmaps(List<Bitmap> list) { for (int i = 0; i < list.size(); i++) { Bitmap bitmap = list.get(i); addBitmapToImageBarnnerViewGroup(bitmap); addDotToLinearlayout(); } } private void addDotToLinearlayout() { ImageView iv = new ImageView(getContext()); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT); layoutParams.setMargins(5,5,5,5); iv.setLayoutParams(layoutParams); iv.setImageResource(R.drawable.dot_normal); linearLayout.addView(iv); } private void addBitmapToImageBarnnerViewGroup(Bitmap bitmap) { ImageView imageView = new ImageView(getContext()); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT)); imageView.setImageBitmap(bitmap); imageBarnnerViewGroup.addView(imageView); } //初始化自定義圖片輪播功能核心類 private void initImageBarnnerViewGroup() { imageBarnnerViewGroup = new ImageBarnnerViewGroup(getContext()); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); imageBarnnerViewGroup.setLayoutParams(layoutParams); imageBarnnerViewGroup.setBarnnerViewGroupLisnner(this);//將linsnner傳遞給Framlayout imageBarnnerViewGroup.setLister(this); addView(imageBarnnerViewGroup); } //初始化底部圓點布局 private void initDotLinearlayout() { linearLayout = new LinearLayout(getContext()); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 40); linearLayout.setLayoutParams(layoutParams); linearLayout.setOrientation(LinearLayout.HORIZONTAL); linearLayout.setGravity(Gravity.CENTER); linearLayout.setBackgroundColor(Color.RED); addView(linearLayout); FrameLayout.LayoutParams layoutParams1 = (LayoutParams) linearLayout.getLayoutParams(); layoutParams.gravity = Gravity.BOTTOM; linearLayout.setLayoutParams(layoutParams1); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { linearLayout.setAlpha(0.5f); } else { linearLayout.getBackground().setAlpha(100); } } @Override public void selectImage(int index) { int count = linearLayout.getChildCount(); for (int i = 0;i < count; i++) { ImageView iv = (ImageView) linearLayout.getChildAt(i); if (i == index) {iv.setImageResource(R.drawable.dot_select); } else {iv.setImageResource(R.drawable.dot_normal); } } } @Override public void chickImageIndex(int pos) { lisenner.chickImageIndex(pos); } public interface FramLayoutLisenner{ void chickImageIndex(int pos); }}

3、程序布局頁面activity_main

<?xml version='1.0' encoding='utf-8'?><RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' tools:context='.MainActivity'> <com.example.tony.imagegroup.view.ImageBannerFramLayout android: android:layout_width='match_parent' android:layout_height='200dp'> </com.example.tony.imagegroup.view.ImageBannerFramLayout></RelativeLayout>

4、新建兩個drawable資源文件dot_normal.xml和dot_select.xml,實現輪播圖底部小圓點

不同的是前者顏色為白色后者為黑色

<?xml version='1.0' encoding='utf-8'?><shape xmlns:android='http://schemas.android.com/apk/res/android' android:shape='oval'> <solid android:color='@android:color/white'/> <size android: android: /></shape>三、運行結果

Android實現輪播圖片效果

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

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩精品一区二区视频| 色网在线免费观看| 成人精品视频| 中文字幕色婷婷在线视频| 日韩三区免费| 亚洲国产日韩欧美在线| 亚洲天堂久久| 99在线精品免费视频九九视 | 在线免费观看亚洲| 日本欧美在线看| 久久国产人妖系列| 国产精品毛片久久| 欧美日韩国产一区二区三区不卡| 免费人成网站在线观看欧美高清| 日产欧产美韩系列久久99| 欧美在线看片| 高清久久一区| 黄色成人91| 日韩高清一区二区| 国产一区二区三区天码| 三上悠亚国产精品一区二区三区| 亚洲国产专区| 久久国产婷婷国产香蕉| 福利精品在线| 三级在线观看一区二区| 日韩欧美久久| 亚洲精品福利电影| 亚洲色图网站| 国产一区二区三区黄网站| 亚洲特级毛片| 国产日本精品| 亚洲夜间福利| 69堂精品视频在线播放| 美女av在线免费看| 亚洲人成精品久久久| 久久男人av| 9国产精品视频| 麻豆免费精品视频| 亚洲欧洲另类| 久久精品国产久精国产| 中文久久精品| 欧美国产一级| 日本欧美大码aⅴ在线播放| 日韩欧美自拍| 日韩av一区二区三区四区| 国产精品字幕| 日韩精品五月天| 激情欧美丁香| 久久免费福利| 视频一区中文字幕精品| 久久夜夜操妹子| 国产精品一级在线观看| 怡红院精品视频在线观看极品| 国产伦精品一区二区三区视频| 欧美午夜精彩| 国产精品成久久久久| 中文字幕亚洲影视| 日韩在线观看不卡| 国产精品第一| 亚洲精品高潮| 亚洲欧洲一区| 久久精品亚洲欧美日韩精品中文字幕| 国产欧美日韩精品一区二区三区| 伊人精品在线| 91精品啪在线观看国产18| 国产精品久久久网站| 免费精品视频最新在线| 国产综合色产| 亚洲www免费| 国产成人免费av一区二区午夜| 国产日韩一区二区三区在线 | 亚洲精品影视| 欧美日韩激情| 日韩av首页| 国产精品久久观看| 国产欧美一区二区色老头| 亚洲免费观看高清完整版在线观| 免费毛片在线不卡| 999国产精品永久免费视频app| 国产精品成人自拍| 日韩av中文字幕一区| 亚洲网址在线观看| 精品高清久久| 亚洲作爱视频| 99久久亚洲精品| av在线资源| 国产一区三区在线播放| 国产模特精品视频久久久久| 1000部精品久久久久久久久| 成人日韩在线| 麻豆免费精品视频| 国产精品欧美大片| 国产精品视频一区二区三区| 日韩精品一区二区三区中文在线| 日韩中文字幕麻豆| 亚洲在线成人| 玖玖玖国产精品| 丝瓜av网站精品一区二区| 国产视频一区在线观看一区免费| 国内精品亚洲| 日韩和欧美的一区| 午夜一级在线看亚洲| 国产成人久久精品一区二区三区| 国产欧美日韩一级| 日韩激情av在线| 久久精品av麻豆的观看方式| 青青国产精品| 国产精品扒开腿做爽爽爽软件| 丝袜美腿成人在线| 亚洲色图国产| 精品视频免费| 精品国产不卡| 蜜桃精品在线| japanese国产精品| 亚洲一区激情| 日韩精品视频网站| 国产精品巨作av| 亚洲精品**中文毛片| 美女网站一区| 亚洲精选成人| 国产欧美一区二区精品久久久| 国产九九精品| www.51av欧美视频| av一区二区高清| 日韩一区免费| 电影91久久久| 免费精品国产的网站免费观看| 日韩精品一卡二卡三卡四卡无卡| 日韩va欧美va亚洲va久久| 久久亚洲精精品中文字幕| 日本精品影院| 亚洲午夜久久| 国产成人久久精品一区二区三区| 欧美日韩精品一区二区视频| 天堂av一区| 精品一区电影| 国产精品99免费看| 日韩av中文在线观看| www.51av欧美视频| 石原莉奈在线亚洲三区| 欧美国产另类| 日韩不卡视频在线观看| 午夜一级在线看亚洲| 国产精一区二区| 精品欧美久久| 国产精品视频一区二区三区 | 日韩在线播放一区二区| 日韩动漫一区| 亚洲成a人片| 欧美日韩午夜电影网| 欧美13videosex性极品| 日韩国产高清在线| 久久高清免费| 国产调教一区二区三区| 午夜欧美在线| 毛片不卡一区二区| 免费日韩av片| 日韩免费高清| 91亚洲精品在看在线观看高清| 91精品韩国| 欧美日韩一视频区二区| 在线日韩欧美| 麻豆久久久久久久| 国产麻豆综合| 国产精品久久观看| 综合激情一区| 久久黄色影院| 成人台湾亚洲精品一区二区 | 亚洲激情偷拍| 日韩国产激情| 国产精品午夜一区二区三区| 久久精品国产亚洲夜色av网站| 日本午夜精品一区二区三区电影| 欧美日韩一二三四| 精品国产成人| 日韩精品国产精品| 欧美在线资源| 日韩欧美精品一区| 免费在线成人| 日本一区二区三区视频在线看| 欧美精选一区二区三区| 中文一区一区三区高中清不卡免费| 欧美亚洲综合视频| 美美哒免费高清在线观看视频一区二区 | 国产精品久久久久久久久久白浆| 亚洲在线网站| 午夜精品亚洲| 亚洲不卡av不卡一区二区| 国产免费播放一区二区| 久久av在线| 一区在线视频观看| 999久久久91| 五月天av在线| 中文在线а√在线8| 国产成人精品一区二区三区视频| 国产精品v日韩精品v欧美精品网站| 日韩国产精品久久久| 婷婷亚洲精品| 日韩在线网址| 日韩高清一级|