安卓輪播圖的實現(自定義view)
/******************************************************* * @author: wukai * * * * * * @date: 2017/10/12 * * * * @description: * * * * * * @version 1.0 * 主介面設定* * * * * *******************************************************/ public classMainActivity extends AppCompatActivity { VerticalText mVerticalText; ArrayList<String> mList; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dai_main); }}
=============================xml設定===========================================
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="160dp"> <com.slideshow.com.comslideshowcom.SlidSowView android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
</LinearLayout>
==========================================自定義view============================
package com.slideshow.com.comslideshowcom; import android.content.Context; import android.os.Handler; import android.os.Message; import android.support.annotation.AttrRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; import java.util.ArrayList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /******************************************************* * @author: wukai * * * * * * @date: 2017/10/12 * * * * @description: * * * * * * @version 1.0 * 自定義輪播圖* * * * * *******************************************************/ public class SlidSowView extends FrameLayout { //自動輪播啟用開關 public static final boolean isAutoPlay = true; private Context mContext; ArrayList<String> mList; ArrayList<ImageView> mImageViews; ArrayList<View> mViews; //當前輪播頁 private int currentItem = 0; //定時任務 private ScheduledExecutorService mScheduledExecutorService; ViewPager mViewPager; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mViewPager.setCurrentItem(currentItem); } }; public SlidSowView(@NonNull Context context) { this(context, null); } public SlidSowView(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public SlidSowView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); this.mContext = context; //初始化資料 initData(); } private void initData() { mImageViews = new ArrayList<>(); mViews = new ArrayList<>(); //初始化佈局 initUI(mContext); //初始化定時任務的方法 initTimer(); } private void initTimer() { mScheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); mScheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 5, TimeUnit.SECONDS); /*new SlideShowTask()是一個實現Runnable介面的類,會自動執行裡面的run()方法,1的意思就是啟動等待時間,這裡就是直接執行, 5是5秒,要是想小時,就把TimeUnit.SECONDS TimeUnit.HOURS,分鐘是TimeUnit.MINUTES*/ } //執行輪播圖切換任務 private class SlideShowTask implements Runnable { @Override public void run() { currentItem = (currentItem + 1) % mImageViews.size(); mHandler.obtainMessage().sendToTarget(); } } private void initUI(Context context) { LayoutInflater.from(context).inflate(R.layout.slidsow, this, true); LinearLayout douLayout = (LinearLayout) findViewById(R.id.linearlatouy_slidsow); douLayout.removeAllViews(); //顯示圖片 ImageView view1 = new ImageView(mContext); view1.setBackgroundResource(R.drawable.a); ImageView view2 = new ImageView(mContext); view2.setBackgroundResource(R.drawable.b); ImageView view3 = new ImageView(mContext); view3.setBackgroundResource(R.drawable.c); ImageView view4 = new ImageView(mContext); view4.setBackgroundResource(R.drawable.d); mImageViews.add(view1); mImageViews.add(view2); mImageViews.add(view3); mImageViews.add(view4); //小點 for (int i = 0; i < mImageViews.size(); i++) { //初始化輪播圖的點選監聽事件 mImageViews.get(i).setId(i); mImageViews.get(i).setOnClickListener(new MyListener()); View pointView = new View(mContext); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10, 10); //初始化圓點以及顏色 if (i == 0) { pointView.setBackgroundResource(R.color.colorAccent); } else { pointView.setBackgroundResource(R.color.colorPrimary); } params.leftMargin = 10; pointView.setLayoutParams(params); mViews.add(pointView); //將小點新增到佈局中去 douLayout.addView(pointView, params); } mViewPager = (ViewPager) findViewById(R.id.viewpager_slidsow); //啟動介面卡 MyPagerAdaapter adaapter = new MyPagerAdaapter(); mViewPager.setFocusable(true); mViewPager.setAdapter(adaapter); //初始化輪播圖的滑動監聽事件 mViewPager.setOnPageChangeListener(new MyPageChangeListener()); //設定初始化需要顯示的條目數 mViewPager.setCurrentItem(0); } //自定義輪播圖點選事件 class MyListener implements OnClickListener { @Override public void onClick(View view) { switch (view.getId()) { case 0: Toast.makeText(mContext, "點選的是第一張輪播圖!", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(mContext, "點選的是第二張輪播圖!", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(mContext, "點選的是第三張輪播圖!", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(mContext, "點選的是第四張輪播圖!", Toast.LENGTH_SHORT).show(); break; } } } //自定義PageChangeListener class MyPageChangeListener implements ViewPager.OnPageChangeListener { //滑動被呼叫 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //滑動狀態被選定 @Override public void onPageSelected(int position) { currentItem = position; for (int i = 0; i < mViews.size(); i++) { if (i == position) { mViews.get(i).setBackgroundResource(R.color.colorAccent); } else { mViews.get(i).setBackgroundResource(R.color.colorPrimary); } } } //滑動狀態改變時 @Override public void onPageScrollStateChanged(int state) { } } //自定義PagerAdapter class MyPagerAdaapter extends PagerAdapter { //返回輪播圖的最大顯示條目數 @Override public int getCount() { return mImageViews.size(); } //判斷View是否可複用 @Override public boolean isViewFromObject(View view, Object object) { return view == object; } //返回要顯示的條目,並建立條目 @Override public Object instantiateItem(ViewGroup container, int position) { int newPosition = position % mImageViews.size(); ImageView imageView = mImageViews.get(newPosition); container.addView(imageView); return imageView; } //銷燬看不到的條目 @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mImageViews.get(position)); } } }=======================================xml=============================================
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/viewpager_slidsow" android:layout_width="match_parent" android:layout_height="match_parent"/> <LinearLayout android:id="@+id/linearlatouy_slidsow" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal" android:padding="8dp"> </LinearLayout> </RelativeLayout>
相關推薦
安卓輪播圖的實現(自定義view)
/******************************************************* * @author: wukai * * * * * * @date: 2017/10/12 *
Bootstrap實現基於carousel.js框架的輪播圖效果(無過渡動畫)
宣告式觸發需要使用到的幾個data-*屬性 1.data-ride:作用在最外層容器上,固定值:carousel 2.data-target:作用在class=carousel-indicator
bootstrap 輪播圖實現大小自適應
</div><a class="left carousel-control" style="background-color: rgba(255,255,255,0);opacity:0" href="#myCarousel" role="button" data-slide="prev"&
JQuery 基礎案例(3)—— jQuery實現輪播圖無縫(無回滾)滾動切換效果
輪播圖無縫滾動切換原理 基本框架 <div class="slide"> <!-- 導航點 --> <ul class="slide-nav"> <li class="activ
簡單輪播圖3(淡入淡出)
html部分 <html> <head> <meta charset="UTF-8"> <title>輪播圖淡入淡出</title> <
react-native-page-scrollview 的使用方法(實現酷炫的分頁輪播效果,還支援自定義View)
react-native-page-scrollview 對ScrollView的封裝,可以很方便的實現水平,垂直分頁輪播效果.而且可以自定義分頁寬高,和側邊View的旋轉,透明度,大小等. 對於原生的ScrollView只支援水平的整屏的分頁,而且我看gi
【vue 元件 mint-ui】 看了一下原始碼,給輪播圖Swiper封裝自定義跳轉的函式
mint-ui 自身提供了前一頁,後一頁的function,這裡由於專案需求,點選任意tab都可跳轉到相應的圖片,所以自己封裝了一個function:switchCar。 Usage import Mint from ‘mint-ui’;
VUE 安裝 輪播圖外掛(vue-awesome-swiper)
npm install vue-awesome-swiper--save//import 引入import Vue from 'vue'import VueAwesomeSwiper from 'vue-awesome-swiper'<template> <div> &l
android柱狀圖(自定義view)
public class HistogramView extends View { private Paint mLinePaint; private Paint mGreenPaint; private Paint mTextPaint;
一步一步教你寫股票走勢圖——分時圖五(自定義標記)
分時圖開發到現在,基本已經完成了,這部分開發完,就會開始著手k線圖部分的開發。於是我們做了最後的對比,看下還有什麼地方需要增加修改,最後發現,還有標記檢視沒有,先看下什麼是標記檢視(博主不知道這個名字叫啥,自己起的): 我們可以看到高亮
android圖片快取實現(自定義ImageLoader)
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import android.content.Context; import android.graphics.Bitmap; import
水波紋(自定義View)
自定義控制元件: public class WaveView extends View { private static final String TAG = "WaveView"; private float fai = 0; private P
android正在載入效果(自定義view)
好久沒有寫部落格了,最近實習的公司在趕專案,現在比較清閒,趁現在寫寫部落格,總結一下自己在實習的時候學到的知識(然而這個demo並不是公司學到的,並沒有什麼卵用),先上效果圖吧,這個實現還是比較簡單的,當時做這個的想法是因為某客學院的正在載入的效果還不錯,所以嘗
安卓最簡單的輪播圖實現無限輪播
Android中的輪播圖實現起來並不難,現在特別是商城類的APP中使用的特別多,自定義view和ViewPager都能很簡單的實現,之前找了幾篇博文都不具備無限輪播的功能,現在自己實現了無限輪播的功能,供大家參考學習和使用~~~~ 先看效果圖: 下面就看一下具體的程
Android 輪播圖 實現 一 :三方框架 自定義viewPager (CircleViewPager.)實現無限輪播。
使用流程:1 。 gradle中新增依賴compile 'com.zhpan.library:viewpager:1.0.3'2.在xml檔案中新增如下程式碼:<com.zhpan.viewpager.view.CircleViewPager andr
Android 實現輪播圖效果(三) 底部圓點狀態改變
自動輪播和手動輪播之後應該實現圓點的切換 自定義改變圓點狀態的監聽器 新建介面public interface DotChangeListener,新增方法void dotChangeListener(int index);並在ImageBannerFramLayout實
Axure學習筆記-輪播圖製作(包括自動輪播及點選)
覺得下面這個分享挺好,我就不重複做了。 如何製作輪播圖: (1)實現圖片輪播; (2)將圓點與輪播圖片一一對應; (3)實現前一張、後一張圖片切換。 1、所需元件 首先我們需要準備以下元件: 動態面板(1000*400)、圓(3個,15*15)、
微信小程式學習筆記(三)----初識小程式程式碼、輪播圖實現
從這一節開始我們就開始接觸小程式前臺程式碼了,其實前臺邏輯還是比較簡單的,學習難度比學習一個前端框架難不了多少,記得以前一開始學前端框架的時候,流程就是:熟悉一下--檢視元件--找到要用的--複製貼上,其實對於大部分人來說,小程式前臺也是一樣。 首先,我們可以先看下小程式的
Axure學習筆記整理2-Banner輪播圖製作(包括自動輪播及手動輪播)
覺得下面這個分享挺好,我就不重複做了。 另外,我在原文中添加了一個小點,關於輪播導致的圓點顏色變化的設定。請看第3章第2部分的紅色字型。 謝謝原作者的分享。以下為原文連結。 轉載至:https://www.jianshu.com/p/628a22c1f653 &nb