1. 程式人生 > >ViewSwitcher類解析,可以用來在兩個View中切換顯示,並新增切換動畫

ViewSwitcher類解析,可以用來在兩個View中切換顯示,並新增切換動畫

前段時間根據專案需求有一個無限向上滾動顯示文字的TextView,這可難住寶寶了,如果說左右迴圈滾動還好,上下滾動沒做過啊,怎麼辦,只有百度了,然後就找到了幾個相關類,TextViewSwitcher,ImageSwitcher,ViewSwitcher,現在就總結一下如何使用這幾個類吧。

1. ViewSwitcher介紹

    開啟ViewSwitch原始碼,我們可以看到上面註釋部分大概意思:ViewSwitcher是在兩個View之間進行切換,它有一個用來建立需要顯示View的工廠類。我們既可以使用該工廠來建立View,也可以直接新增它們。一個ViewSwitcher有且只能有兩個子View,而且同時只能有一個View顯示給使用者。 下面是ViewSwitcher的原始碼:
public class ViewSwitcher extends ViewAnimator {
    /**
     * 用來建立兩個子View的工廠物件,
     */
    ViewFactory mFactory;

    public ViewSwitcher(Context context) {
        super(context);
    }

    public ViewSwitcher(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /**
    * 該方法用來新增View,可以看到如果ViewSwitcher中的子View大於等於兩個的時候
    * 再新增View的時候會報錯,
    */
@Override public void addView(View child, int index, ViewGroup.LayoutParams params) { if (getChildCount() >= 2) { throw new IllegalStateException("Can't add more than 2 views to a ViewSwitcher"); } super.addView(child, index, params); } @Override
public CharSequence getAccessibilityClassName() { return ViewSwitcher.class.getName(); } /** * 獲取到下一個view */ public View getNextView() { int which = mWhichChild == 0 ? 1 : 0; return getChildAt(which); } /** *該方法通過ViewFactory工廠,建立View,新增到VeiwSwitcher中,並返回該view */ private View obtainView() { View child = mFactory.makeView(); LayoutParams lp = (LayoutParams) child.getLayoutParams(); if (lp == null) { lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); } addView(child, lp); return child; } /** *設定一個ViewFactory工廠物件,呼叫obtainView方法,在obtainView中呼叫ViewFactory的makeView方法建立View,並新增到ViewSwitcher中, */ public void setFactory(ViewFactory factory) { mFactory = factory; obtainView(); obtainView(); } /** *該方法用來重置ViewSwitcher中子View為不可見 */ public void reset() { mFirstTime = true; View v; v = getChildAt(0); if (v != null) { v.setVisibility(View.GONE); } v = getChildAt(1); if (v != null) { v.setVisibility(View.GONE); } } /** * 用來建立View新增到ViewSwitcher中的ViewFactory介面 */ public interface ViewFactory { View makeView(); } }

2. ViewSwitcher使用:

     1.在佈局中進行填充:
    <ViewSwitcher
        android:id="@+id/viewSwitcher"
        android:layout_width="80dp"
        android:layout_height="80dp"/>
    2. 在Activity或Fragment中查到到該控制元件:
    ViewSwitcher viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
    viewSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {  //建立需要顯示的View
                ImageView iv = new ImageView(this);
                iv.setLayoutParams(new ImageSwitcher.LayoutParams(
                               ImageSwitcher.LayoutParams.WRAP_CONTENT,
                                ImageSwitcher.LayoutParams.WRAP_CONTENT));
                return iv;
            }
        });
        viewSwitcher.getNextView(); // 獲取到下一個View物件 
        //下面幾個方法都來自其父類
        viewSwitcher.showNext();    // 顯示上一個View
        viewSwitcher.showPrevious();  // 顯示下一個View
        viewSwitcher.setInAnimation();  // 設定進入顯示的動畫
        viewSwitcher.setOutAnimation(); // 設定退出不顯示的動畫

相關推薦

ViewSwitcher解析可以View切換顯示新增切換動畫

前段時間根據專案需求有一個無限向上滾動顯示文字的TextView,這可難住寶寶了,如果說左右迴圈滾動還好,上下滾動沒做過啊,怎麼辦,只有百度了,然後就找到了幾個相關類,TextViewSwitcher,ImageSwitcher,ViewSwitcher,現在就

js==比較相等的字串時報錯

問題描述:今天我在js中比較兩個兩個字串時,發現明明值相等的兩個變數,在if else語句中,卻不進入if中,而是去else中執行。 程式碼如下:var checkedLanguage=$("#checked-language").text(); if(' en_US '

async太好小時寫的程式碼

/* 從5442網站上把所有的熱門推薦下載下來 async+cheerio+request */ const util = require('util'); const request = require('request'); const http = require

宣告person該類定義了資料成員一個帶參的構造方法一個具有引數的構造方法一個方法prin()

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Con

定義一個函式模板要求返回的較小值。

#include<iostream> using namespace std; template<typename T>//定義函式模板,T為型別引數; T cmin(T a,T b)//函式的返回型別和形參型別; { T min=a;//儲存最大的變數; if(a&

玩轉ProgressBar,設定漸變效果同時設定進度的顏色顯示!!!

廢話就不多說了,直接看看效果吧! 解析 :ProgressBar 有兩個屬性:          1、progress : 這個大家都非常清楚,設定進度都是用這個屬性,不必多解釋了(progress 圖層在 secondaryProgress之上)      

map端join的實現 解決小表資料的讀取

通過閱讀父類Mapper的原始碼,發現 setup方法是在maptask處理資料之前呼叫一次 可以用來做一些初始化工作 1、需求: 訂單資料表t_order: id date pid amount 1001 20150710 P0001 2

excel使用vba寫一個駝峰工具將資料表的欄位改為程式碼的欄位

寫之前在網上沒有找到自己想要的效果,就想著自己寫一下,感覺還挺簡單 因為以前從來沒有接觸過vba,所以查了一些資料。想把過程記錄一下 下面就是最終想要的效果圖 把程式碼也貼下吧 Sub tuoFeng()     Dim preValue, finValue As Str

刪除陣列相同的數統計陣列重複數個數把不同數找出來

#include<iostream> using namespace std; #define N 9 #define M 7 int del(int len,int array[]); int compare_array( int len1, int arra

ios delegate代理/不同/view之間傳遞資料傳遞批量資料多個數據

要在view之間傳資料大家都知道用delegate,我這裡談一下心得,適合新手。 網上一搜一大把的傳遞資料,但是都是單個數據,比如-(void)passValue:(NSString*)str; 這有個毛用,我們手機介面那個大,傳一個數據有個錘子用啊?聽說羅永浩在富士康附近

一些巨集替換用法使程式碼更加精煉。總結了一個foreachc++容器遍歷一個計算程式碼執行時間的。

一:#ifndef foreach #define foreach(container,it) \ for(typeof((container).begin()) it = (container).begin();it != (container).end() ;++it) #endif

旅行服務你出境遊 分為當地人和版本在

c2c dad ada d3d ade F12 ef7 c51 adc http://baobao.baidu.com/article/641c12ddf34fb2546b045444434e0032.html http://baobao.baidu.com/articl

定義抽象Shape抽象方法為showArea()求出面積並顯示,定義矩形Rectangle,正方形Square,圓 Circle根據各自的屬性,用showArea方法求出各自的面積在main方法構造3對象調showArea方法。(體現多態)

子類 protected new 都是 package 使用 類指針 3.1 shape 實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象 重載重寫重定義的區別: 1.重載:在同一個類中進行;  編譯時根據參數類型和個數決定方法調用; 

利用MAP存數據防止超時一開始for 循環CodeForces - 702B

開始 def cout += -cp CI ace sin com #include<bits/stdc++.h> using namespace std; map <int,int> M; long long ans; int main()

有一棟100層高的大樓給你完全相同的玻璃球。假設從某一層開始丟下玻璃球會摔碎。那麽怎麽利用手中的什麽最優策略知道這個臨界的層是第幾層?

要求 避免 怎麽 減少 使用 相同 二分 價值 策略 題目有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麽怎麽利用手中的兩個球,用什麽最優策略知道這個臨界的層是第幾層???   每次肯定是由低的樓層往高的樓層嘗試,直到在樓層f(

編寫一個ArrayList儲存1到10之間的數打亂順序後輸出按從小到大輸出按從大到小輸出。

/** * Created by whp on 2018/7/30. */ public class Test { public static void main(String[] args) { List list = new ArrayList();

編寫一個Java應用程式戶在輸入對話方塊輸入日期後(日期格式為YYYYMMDD如1999年1月12日應輸入為19990112)程式將判斷日期的先後順序以及日期之間的間隔天數(例

編寫一個Java應用程式,當用戶在輸入對話方塊中輸入兩個日期後(日期格式為YYYYMMDD, 如1999年1月12日應輸入為19990112), 程式將判斷兩個日期的先後順序, 以及兩個日期之間的間隔天數(例如1999年1月1日和1999年1月2日之間的間隔是1天。  

必應的壁紙接口可用獲取海量的高質量壁紙和相關故事

文字 桌面 code 加載 更換 隨機 ide art tip 必應在國內的名氣不是很大,很多人不知道。必應是美國微軟的搜索引擎,類似與百度。不過,有個地方很有趣,必應的首頁背景圖,每日一換,從不重復。都是團隊精選的世界各地的風景、人文類的美圖,配有相關文字描述。還是挺有意

實現一個把冒泡和插入封裝到函式去(宣告函式一個是冒泡一個是插入)且進行呼叫和除錯

實現一個類,把冒泡和插入封裝到兩個函式中去(宣告兩個函式,一個是冒泡,一個是插入),且進行呼叫和除錯 import java.util.Arrays; /* * 實現一個類,把冒泡和插入封裝到兩個函式中去(宣告兩個函式,一個是冒泡,一個是插入),且進行呼叫和除錯 */ public class E

PHP只保留字串首尾字元隱藏中間*代替(字元時只顯示第一個)

/** * 只保留字串首尾字元,隱藏中間用*代替(兩個字元時只顯示第一個) * @param [string] $user_name 字串 * @param [int] $head 左側保留位數 * @param [int] $foot 右側保留位數 * @r