1. 程式人生 > >基於ViewFlipper實現的自定義新手指引控制元件.

基於ViewFlipper實現的自定義新手指引控制元件.

第一步:新建Android工程ViewFlipperDemo:


第二步:新建AdverView.java程式碼如下:

  1. package com.tutor.viewflipper;  
  2. import android.content.Context;  
  3. import android.graphics.Bitmap;  
  4. import android.graphics.BitmapFactory;  
  5. import android.util.AttributeSet;  
  6. import android.view.Gravity;  
  7. import android.view.MotionEvent;  
  8. import android.view.animation.Animation;  
  9. import android.view.animation.TranslateAnimation;  
  10. import android.widget.FrameLayout;  
  11. import android.widget.ImageView;  
  12. import android.widget.LinearLayout;  
  13. import android.widget.ViewFlipper;  
  14. /** 
  15.  * @author frankiewei. 
  16.  * 廣告推薦外掛,可以自定義img個數. 
  17.  */
  18. public
    class AdvserView extends FrameLayout {  
  19.     /** 
  20.      * 當前索引值.預設第一張圖片被選中. 
  21.      */
  22.     privateint mCurrentIndex = 0;  
  23.     /** 
  24.      * 上下文. 
  25.      */
  26.     private Context mContext;  
  27.     /** 
  28.      * 點選螢幕的X左邊值. 
  29.      */
  30.     privatefloat startX;  
  31.     /** 
  32.      * 裝置的寬度. 
  33.      */
  34.     privateint mDisplayWidth;  
  35.     /**
     
  36.      * 從左到右進入的動畫. 
  37.      */
  38.     private Animation mLeft2RightInAnimation;  
  39.     /** 
  40.      * 從左到右出去動畫. 
  41.      */
  42.     private Animation mLeft2RightOutAnimation;  
  43.     /** 
  44.      * 從右到左進入動畫. 
  45.      */
  46.     private Animation mRight2LeftInAnimation;  
  47.     /** 
  48.      * 從右到左出去動畫. 
  49.      */
  50.     private Animation mRight2LeftOutAnimation;  
  51.     /** 
  52.      * 動畫播放時間. 
  53.      */
  54.     privatelong duration = 1000;  
  55.     /** 
  56.      * ViewFlipper控制元件,繼承FrameLayout,圖片的容器. 
  57.      */
  58.     private ViewFlipper mViewFlipper;  
  59.     /** 
  60.      * 下面動態生成點點tip的容器. 
  61.      */
  62.     private LinearLayout mTipLinearLayout;  
  63.     /** 
  64.      * 正常點點的Bitmap. 
  65.      */
  66.     private Bitmap mPointNorBitmap;  
  67.     /** 
  68.      * 被選中的點點的Bitmap. 
  69.      */
  70.     private Bitmap mPointSelBitmap;  
  71.     /** 
  72.      * 這裡是要顯示的廣告圖片的資源ID,可以自定義個數. 
  73.      */
  74.     privateint[] imgResIds = {R.drawable.test1,R.drawable.test2,R.drawable.test3,  
  75.             R.drawable.test4,R.drawable.test5};  
  76.     public AdvserView(Context context) {  
  77.         super(context);  
  78.         setupViews();  
  79.     }  
  80.     public AdvserView(Context context,AttributeSet attr) {  
  81.         super(context,attr);  
  82.         setupViews();  
  83.     }  
  84.     privatevoid setupViews(){  
  85.         mContext = getContext();          
  86.         mDisplayWidth = getResources().getDisplayMetrics().widthPixels;  
  87.         mViewFlipper = new ViewFlipper(mContext);  
  88.         mTipLinearLayout = new LinearLayout(mContext);  
  89.         mPointNorBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.point_normal);  
  90.         mPointSelBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.point_selected);  
  91.         //將廣告圖片加入ViewFlipper.
  92.         for(int i = 0; i < imgResIds.length; i++){  
  93.             ImageView imageView = new ImageView(mContext);  
  94.             imageView.setImageResource(imgResIds[i]);  
  95.             mViewFlipper.addView(imageView);  
  96.         }  
  97.         //將點點動態加入Linerlayout.
  98.         for(int j = 0; j < imgResIds.length; j++){  
  99.             ImageView imageview = new ImageView(mContext);  
  100.             if(j == 0){  
  101.                 imageview.setImageBitmap(mPointSelBitmap);  
  102.             }else{  
  103.                 imageview.setImageBitmap(mPointNorBitmap);  
  104.             }  
  105.             mTipLinearLayout.addView(imageview);  
  106.         }  
  107.         addView(mViewFlipper);  
  108.         addView(mTipLinearLayout);  
  109.         mTipLinearLayout.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);  
  110.         //初始化動畫.
  111.         mLeft2RightInAnimation = new TranslateAnimation(-mDisplayWidth, 000);  
  112.         mLeft2RightInAnimation.setDuration(duration);  
  113.         mLeft2RightOutAnimation = new TranslateAnimation(0, mDisplayWidth, 00);  
  114.         mLeft2RightOutAnimation.setDuration(duration);  
  115.         mRight2LeftInAnimation = new TranslateAnimation(mDisplayWidth, 000);  
  116.         mRight2LeftInAnimation.setDuration(duration);  
  117.         mRight2LeftOutAnimation = new TranslateAnimation(0, -mDisplayWidth, 00);  
  118.         mRight2LeftOutAnimation.setDuration(duration);  
  119.     }  
  120.     @Override
  121.     publicboolean onTouchEvent(MotionEvent event) {  
  122.         switch (event.getAction()) {  
  123.         case MotionEvent.ACTION_DOWN:  
  124.             startX = event.getX();  
  125.             break;  
  126.         case MotionEvent.ACTION_UP:  
  127.             ImageView lastSelImageView  = (ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);  
  128.             //判斷左右滑動切換圖片.
  129.             if(event.getX() > startX){  
  130.                 mViewFlipper.setInAnimation(mLeft2RightInAnimation);  
  131.                 mViewFlipper.setOutAnimation(mLeft2RightOutAnimation);  
  132.                 mViewFlipper.showNext();  
  133.                 mCurrentIndex++;  
  134.                 if(mCurrentIndex > imgResIds.length -1){  
  135.                     mCurrentIndex = 0;  
  136.                 }  
  137.             }elseif(event.getX() < startX){  
  138.                 mViewFlipper.setInAnimation(mRight2LeftInAnimation);  
  139.                 mViewFlipper.setOutAnimation(mRight2LeftOutAnimation);  
  140.                 mViewFlipper.showPrevious();  
  141.                 mCurrentIndex--;  
  142.                 if(mCurrentIndex < 0){  
  143.                     mCurrentIndex = imgResIds.length -1;  
  144.                 }  
  145.             }  
  146.             ImageView imageview = (ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);  
  147.             imageview.setImageBitmap(mPointSelBitmap);  
  148.             lastSelImageView.setImageBitmap(mPointNorBitmap);  
  149.             break;  
  150.         default:  
  151.             break;  
  152.         }  
  1. 相關推薦

    基於ViewFlipper實現定義新手指引控制元件.

    第一步:新建Android工程ViewFlipperDemo: 第二步:新建AdverView.java程式碼如下: package com.tutor.viewflipper;   import android.content.Context;   imp

    【UE4】 第07講 實現定義的行走控制元件

          在圖形業,只有技術是不行的,你要明白我們從事的工作,我們可是在作詩,我們是詩人 - Nvidia創始人黃仁勳(圖形皇帝)       (版權宣告,禁止轉載)      U

    定義上傳控制元件實現

    FileReader 物件 存檔 方便以後拿來即用 可以整合 canvas圖片裁剪進行實現 <input type="file" value="提交" id="file"> <button id="btn">上傳圖片並預覽</button>

    android定義星級評分控制元件,可實現只顯示實心星星

    話不多說,上圖 近日app需求弄一個等級展示,看了下UI圖,只顯示實星(點亮的星星).如圖 但是網上關於星級評分的例子大多這樣 也展示虛心星星 通過自定義View package com.starsbar; import android.content.C

    Android實現定義相機系列(1)—定義view裁剪控制元件

    目標 本系列文章主要記錄自定義相機拍照系列,專案原始碼還在編寫中,後續會傳到github,內容包括: 1、使用Android的Camera API自定義拍照模式,例如人臉拍照,OCR拍照等; 2、對拍完的照片進行裁剪; 3、自定義圖片伸縮view,使用手勢對圖

    基於ckeditor實現定義表單

    最近公司的一個系統需要自定義表單,根據以往使用ckeditor的經驗突發奇想,用ckeditor編寫外掛的方式實現了一個自定義表單系統。下面簡單介紹一下表單設計器的設計思路。 表單設計器原理 表單智慧設計器的設計思想是基於ckeditor富文字編輯器,開發HTML表單中需要

    Android實現定義鎖屏控制

       當在Android手機上需要實現自定義的鎖屏,  往往在進入自定義的鎖屏介面介面之前需要先解開螢幕鎖, 以順利的進入自定義鎖屏介面 ,並能方便使用者即時的做其他操作,下面用程式碼來實現這一功能:  1、點亮螢幕與解系統鎖 //light the screen Pow

    基於 WebRTC 實現定義編碼解析度傳送

    2020年如果問什麼技術領域最火?毫無疑問:**音視訊**。2020年遠端辦公和線上教育的強勢發展,都離不開音視訊的身影,視訊會議、線上教學、娛樂直播等都是音視訊的典型應用場景。 更加豐富的使用場景更需要我們考慮**如何提供更多的可配置能力項,**比如解析度、幀率、位元速率等**,以實現更好的使用者體驗**

    定義Switch開關控制元件

    自定義Switch開關控制元件 *做安卓也有一年多了*,一直想去學習**自定義控制元件**這一塊(其實是自己懶–!),最近閒下來看了很多關於自定義控制元件方面的東西,雖然不是很熟練,但是基本上能去弄清楚它的實現方式有哪些。。也自己試著去模仿別人的程式碼做了一些自定義的控制元件,其中就有

    《第一行程式碼Android》學習總結第三章 定義佈局與控制元件

    1、View是Android中最基本的元件,它可以在螢幕上繪製一塊矩形區域,並在這塊區域內響應各種事件。所有控制元件都直接或間接繼承自View。 2、ViewGroup是一種特殊的View,可以包含很多子View和子ViewGroup,是一個用於放置控制元件和佈局的容器。所有佈局都直接或間

    定義加減控制元件

    public class MyAddSubView extends LinearLayout implements View.OnClickListener { private int number = 1; private TextView tv_sub; pri

    Android定義標籤列表控制元件LabelsView

    無論是在移動端的App,還是在前端的網頁,我們經常會看到下面這種標籤的列表效果: 標籤從左到右擺放,一行顯示不下時自動換行。這樣的效果用Android源生的控制元件很不好實現,所以往往需要我們自己去自定義控制元件。我在開發中就遇到過幾次要實現這樣的標籤列表效果,所以就自己寫了個控制元件,放到我的

    Bugly 版本升級UI定義之固定控制元件id

    1. Beta.upgradeDialogLayoutId = R.layout.layout_upgrade_dialog; 2.佈局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:androi

    QT定義碰撞效果控制元件

    import QtQuick 2.6 import QtGraphicalEffects 1.0 /*  * 作者: yubo  * 功能: CollideAuto  * 描述: 提供一個公共呼叫碰撞動畫控制元件  * 日期: 2018-08-09 &nb

    pyqt4 定義圓形指示燈控制元件

    # -*- coding: utf-8 -*-# #------------------------------------------------------------------------------- # Name: 自定義圓形指示燈

    學習定義 —— 定義線型圖控制元件

    自定義控制元件篇:                                                       自定義折線圖 前言:自定義控制元件永遠都是客戶端開發的一個必須攻破的難題 首先得了解需要實現的樣式,確定有沒有可繼承的控制元件類,若沒有就

    細說 Angular 的定義表單控制元件 (贊,實用)

    我們在構建企業級應用時,通常會遇到各種各樣的定製化功能,因為每個企業都有自己獨特的流程、思維方式和行為習慣。有很多時候,軟體企業是不太理解這種情況,習慣性的會給出一個診斷,『你這麼做不對,按邏輯應該這樣這樣』。但企業往往不會接受這種說法,習慣的力量是強大的,我們一定要尊重

    Android-定義星星評分控制元件RatingBar

    星級評分條RatingBar類似於SeekBar、ProgressBar'等等都可以自定義樣式 它的主要用途就比如淘寶、景點 滿意度等 這裡給出兩種自定義效果 如圖所示 第一種是通過RatingBar獲得分數 第二個是通過RatingBar動態調節控制元件屬性(透明度) 由

    定義一個分段控制元件(仿QQ頂部的分段控制元件

    在Android當中並沒有分段控制元件,怎樣去實現一個這樣的分段控制元件,那就要自己去自定義了; 先看一張效果圖: 整體的思路: 1. 設定分段控制元件背景資源 2. 自定義segmentView繼承LinearLayout 3. 設定分段控制元件的屬性(文字的顏色、文

    【轉】WPF定義控制元件與樣式(8)-ComboBox與定義多選控制元件MultComboBox

    一.前言   申明:WPF自定義控制元件與樣式是一個系列文章,前後是有些關聯的,但大多是按照由簡到繁的順序逐步釋出的等。   本文主要內容: 下拉選擇控制元件ComboBox的自定義樣式及擴充套件; 自定義多選控制元件MultiComboBox; 二.下拉選擇控制元件ComboBox的自