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; 這有個毛用,我們手機介面那個大,傳一個數據有個錘子用啊?聽說羅永浩在富士康附近
一些巨集替換用法,使程式碼更加精煉。總結了兩個,一個foreach,用來c++容器遍歷,一個計算程式碼執行時間的。
一:#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