Android界面特效全匯總_第1頁
Android界面特效全匯總_第2頁
Android界面特效全匯總_第3頁
Android界面特效全匯總_第4頁
Android界面特效全匯總_第5頁
已閱讀5頁,還剩273頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 HYPERLINK /woshinia/article/details/11039677 Android界面特效全匯總 分類: HYPERLINK /woshinia/article/category/1413047 Android 2013-09-04 11:20 346人閱讀 HYPERLINK /woshinia/article/details/11039677 l comments 評論(0) HYPERLINK javascript:void(0); o 收藏 收藏 HYPERLINK /woshinia/article/details/11039677 l report o 舉報

2、 舉報 (一)Activity 頁面切換的效果Android 2.0 之后有了 overridePendingTransition() ,其中里面兩個參數(shù),一個是前一個 activity 的退出兩一個 activity 的進(jìn)入,Java 代碼1. Overridepublic void onCreate(Bundle savedInstanceState) 2. super.onCreate(savedInstanceState);3.4. setContentView(R.layout.SplashScreen);5.6. new Handler().postDelayed(new Runn

3、able() 7. Override8. public void run() 9. Intent mainIntent = new Intent(SplashScreen.this, AndroidNews.class);10. SplashScreen.this.startActivity(mainIntent);11. SplashScreen.this.finish();12.13. overridePendingTransition(R.anim.mainfadein,14. R.anim.splashfadeout);15. 16., 3000);上面的代碼只是閃屏的一部分。Java

4、 代碼1. getWindow().setWindowAnimations ( int ); 這可沒有上個好但是也可以 。實現(xiàn)淡入淡出的效果Java 代碼1. overridePendingTransition(Android.R.anim.fade_in,android.R.anim.fade_out);由左向右滑入的效果Java 代碼1. overridePendingTransition(Android.R.anim.slide_in_left,android.R.anim.slide_out_right);實現(xiàn) zoomin 和 zoomout,即類似 iphone 的進(jìn)入和退出時的效

5、果Java 代碼1. overridePendingTransition(R.anim.zoomin, R.anim.zoomout);新建 zoomin.xml 文件Xml 代碼1. 2. 新建 zoomout.xml 文件Xml 代碼1. 2. 6. 10.12.(二)android 菜單動畫先請注意,這里的菜單并不是按機(jī)器上的 MENU 出現(xiàn)在那種菜單,而是基于Android SDK 提供的 android.view.animation.TranslateAnimation(extendsandroid.view.animation.Animation)類實例后附加到一個 Layout

6、上使之產(chǎn)生的有動畫出現(xiàn)和隱藏效果的菜單。 原理:Layout(菜單)從屏幕內(nèi)(挨著屏幕邊沿,其實并非一定,視需要的初態(tài)和末態(tài)而定)動態(tài)的移動到屏幕外(在外面可以挨著邊沿,也可以離遠(yuǎn)點,這個無所謂了),這樣就可以達(dá)到動態(tài)菜單的效果了。但是由于 Animation 的一些奇怪特性(setFill*() 函數(shù)的作用效果,這個在我使用的某幾個 Animation 當(dāng)中出現(xiàn)了沒有想明白的效果),就暫不理會這個東西了,所以使得我們還需要用上 XML 屬性 android:visibility。當(dāng) Layout(菜單)顯示的時候,設(shè)置 android:visibility=visible,當(dāng) Layout(

7、菜單)隱藏的時候,設(shè)置 android:visibility=gone,這里 android:visibility 可以有 3 個值,visible為可見,invisible為不可見但占空間,gone為不可見且不占空間(所謂的占不占空間,這個可以自己寫個 XML 來試試就明白了)。 Class TranslateAnimation 的使用:Animation 有兩種定義方法,一種是用 Java code,一種是用 XML,這里只介紹用 code 來定義(因為用XML 來定義的那種我沒用過。嘿嘿。)。多的不說,看代碼。這里是 TranslateAnimationMenu.java(我在里面還另加

8、入了 ScaleAnimation產(chǎn)生的動畫,各位朋友可以照著 SDK 以及程序效果來理解):package com.TranslateAnimation.Menu;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.TranslateAnimation;import an

9、droid.widget.Button;import android.widget.LinearLayout;public class TranslateAnimationMenu extends Activity /* Called when the activity is first created. */ /TranslateAnimation showAction, hideAction; Animation showAction, hideAction; LinearLayout menu; Button button; boolean menuShowed; Override pu

10、blic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); menu = (LinearLayout) findViewById(R.id.menu); button = (Button) findViewById(R.id.button); / 這里是 TranslateAnimation 動畫 showAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0.0f

11、,Animation.RELATIVE_TO_SELF,0.0f, Animation.RELATIVE_TO_SELF, -1.0f,Animation.RELATIVE_TO_SELF, 0.0f);/ 這里是 ScaleAnimation 動畫/showAction = new ScaleAnimation(/ 1.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f,/ Animation.RELATIVE_TO_SELF, 0.0f);showAction.setDuration(500);/ 這里是 TranslateAnim

12、ation 動畫hideAction = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, -1.0f);/ 這里是 ScaleAnimation 動畫/hideAction = new ScaleAnimation(/ 1.0f, 1.0f, 1.0f, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f, Animat

13、ion.RELATIVE_TO_SELF,0.0f);hideAction.setDuration(500);menuShowed = false;menu.setVisibility(View.GONE);button.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub if (menuShowed) menuShowed = false; menu.startAnimation(hideAction); menu.set

14、Visibility(View.GONE); else menuShowed = true; menu.startAnimation(showAction); menu.setVisibility(View.VISIBLE); ); 這里是 main.xml: Android 基于 TranslateAnimation 的動畫動態(tài)菜單android 布局屬性文章分類:移動開發(fā)第一類:屬性值為 true 或 false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_cen

15、terInparent 相對于父元素完全居中 android:layout_alignParentBottom 貼緊父元素的下邊緣 android:layout_alignParentLeft 貼緊父元素的左邊緣 android:layout_alignParentRight 貼緊父元素的右邊緣 android:layout_alignParentTop 貼緊父元素的上邊緣 android:layout_alignWithParentIfMissing 如果對應(yīng)的兄弟元素找不到的話就以父元素做參照物 第二類:屬性值必須為 id 的引用名“id/id-name” android:layout_b

16、elow 在某元素的下方 android:layout_above 在某元素的的上方 android:layout_toLeftOf 在某元素的左邊 android:layout_toRightOf 在某元素的右邊 android:layout_alignTop 本元素的上邊緣和某元素的的上邊緣對齊 android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊 android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊 android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊 第三類:屬性值為具體的像素值

17、,如 30dip,40px android:layout_marginBottom 離某元素底邊緣的距離 android:layout_marginLeft 離某元素左邊緣的距離 android:layout_marginRight 離某元素右邊緣的距離 android:layout_marginTop 離某元素上邊緣的距離EditText 的 android:hint設(shè)置 EditText 為空時輸入框內(nèi)的提示信息。android:gravityandroid:gravity 屬性是對該 view 內(nèi)容的限定比如一個 button 上面的text. 你可以設(shè)置該 text 在 view 的靠

18、左,靠右等位置以 button 為例,android:gravity=right則 button 上面的文字靠右android:layout_gravityandroid:layout_gravity 是用來設(shè)置該 view 相對與起父 view 的位置比如一個 button 在 linearlayout 里,你想把該 button 放在靠左、靠右等位置就可以通過該屬性設(shè)置以 button 為例,android:layout_gravity=right則 button靠右android:layout_alignParentRight使當(dāng)前控件的右端和父控件的右端對齊。這里屬性值只能為 true

19、 或 false,默認(rèn) false。android:scaleType:android:scaleType 是控制圖片如何 resized/moved 來匹對 ImageView 的 size。ImageView.ScaleType / android:scaleType 值的意義區(qū)別:CENTER /center 按圖片的原來 size 居中顯示,當(dāng)圖片長/寬超過 View 的長/寬,則截取圖片的居中部分顯示CENTER_CROP / centerCrop 按比例擴(kuò)大圖片的 size 居中顯示,使得圖片長(寬)等于或大于 View 的長(寬)CENTER_INSIDE / centerIns

20、ide 將圖片的內(nèi)容完整居中顯示,通過按比例縮小或原來的 size 使得圖片長/寬等于或小于 View 的長/寬FIT_CENTER / fitCenter 把圖片按比例擴(kuò)大/縮小到 View 的寬度,居中顯示FIT_END / fitEnd 把圖片按比例擴(kuò)大/縮小到 View 的寬度,顯示在 View的下部分位置FIT_START / fitStart 把圖片按比例擴(kuò)大/縮小到 View 的寬度,顯示在 View的上部分位置FIT_XY / fitXY 把圖片不按比例擴(kuò)大/縮小到 View 的大小顯示MATRIX / matrix 用矩陣來繪制,動態(tài)縮小放大圖片來顯示。* 要注意一點,Dra

21、wable 文件夾里面的圖片命名是不能大寫的。2010-10-28android 翻頁:之前看到不少翻頁,不過人家沒有分享出代碼來,我也一直沒有搞出來.想了好久,實現(xiàn)原理并不是那么的難,怎么實現(xiàn)就比較難了.當(dāng)然像 3D 現(xiàn)實模擬分頁的難度是比較大的.平面的分頁,簡單點說就是用三張片,模擬分頁時可見區(qū),這里我弄了一個 View,里面有翻頁的效果.OnDraw 中;最底一張是將要顯示的,先畫出來,接著畫原來那張,放中間,疊為這張片要翻頁的過程中慢慢消失,一點一點被拉出去,最后一張就是最上面的,為什么要用這張片呢?當(dāng)頁面被翻起后,一個角消失了,就比如第二張不顯示的部分,那這部分,就是第三張了,再覆蓋

22、第二張上面,形成一種看似翻書的.效果.然后第二張(假設(shè)從左邊開始被翻起,左邊先消失),左邊緣再畫出一條線,當(dāng)然這條線要粗點,然后設(shè)置顏色漸變,還要透明的,就有一種陰影的效果.我開始一直想,像這樣的,不難實現(xiàn)啊,當(dāng)然只限于矩形的,疊為當(dāng)時沒有想到如何處理第二張消失部分為一個三角形.可以通過 Rect 來設(shè)置一個 Bitmap,的寬度.Rect rect = new Rect(mWidth, 0, width, height);canvas.drawBitmap(image2, null, rect, paint2);mWidth就是左邊消失部分的寬度.通過不斷改變這個值,然后再刷新View就可以

23、看到一種滾動的效果.第二張片左邊慢慢消失, width,height 為畫面目的寬高.然后可以添加一個第三張片,也用同樣的方法設(shè)置了它顯示的寬,高,通過上面 Rect 的處理,看到一般的效果.比較常見的是從一個角開始,然后慢慢的卷起來,而不是像上面平行的,(上面只能看到平行的效果.)這里就涉及到了一個角,就是三角形如何產(chǎn)生的問題,這個問題臺擾了好久.今天想到辦法了.就是用 Path 去畫多邊形.一個矩形,減去一個多邊形,就剩下一個三角形了.先討論上面那種效果的處理方式:首先是 View:的 OnDraw 方法.Java 代碼1. width = getWidth();2. height = g

24、etHeight();3. /畫最底下一張將要顯示的圖片4. Rect rect = new Rect(0, 0, width, height);5. canvas.drawBitmap(image1, null, rect, paint1);6. /畫上面卷起的那張.實現(xiàn)平行翻頁效果.7. rect = new Rect(mWidth, 0, width, height);8. canvas.drawBitmap(image2, null, rect, paint2);9. /當(dāng)然之后再處理卷起邊緣陰影,模糊等效果,這里省略了.還有圖片Image1,image2 自己準(zhǔn)備了10.然后就是手勢

25、,沒有手勢,翻頁顯得很呆板.11.這個 View 實現(xiàn) OnGestureListener,自然有一些方法要覆蓋的.12.其它方法隨便了,有返回值的給它一個 True,主要是13.public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)這個方法,比較有用.14.myHandler.removeMessage(0);/./我覺得要先移除上一次翻頁的動作,然后會馬上從上一次運行中停止,而立即向當(dāng)前需要的方向變化.15.if(e1.getX() - e2.getX() 0)16.

26、turnLeft(5);/向左翻17.else if(e2.getX() - e1.getX() 0)18. turnRight(5);/向右翻19.20.兩個方法差不多,也可以合并,傳入正負(fù)值.21.delta = speed;參數(shù)就是上面的 5,作為變化速度.22.myHandler.sendEmptyMessage(0);23.普通的View要Handler來更新.之前試過了,以為在View直接Invalidate可以.24.雖然沒有提示非 UI 線程的問題,但是循環(huán)了多次只看到 OnDraw 執(zhí)行一次而以.25.public void handleMessage(Message mes

27、sage)26. invalidate();27. mWidth += delta;/變化第二張圖片的寬.28. if(delta 0)/向右滾動29. if(mWidth 0)34. sendEmptyMessage(0);8.39.然后在 XML 里用這個 View,最后 Activity 里 SetContentView 就 OK 了/40.46.47.由于使用 XML,所以構(gòu)造方法必須要有,帶兩個參數(shù)的.48.public PageView(Context context, AttributeSet attrs)49. super(context, attrs);5

28、0. initView();51.52.InitView:53.private void initView()54. image1 = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.aac);55. image2 = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.q1);56. image3 = Bitmap.createBitmap(BitmapFactory.decodeResou

29、rce(getResources(), R.drawable.q2);57.58. myHandler = new MyHandler();59. gestureDetector = new GestureDetector(this);60. mShader = new LinearGradient(10, 250, 250, 250,61. new intColor.RED, Color.GREEN, Color.BLUE,62. null, Shader.TileMode.MIRROR);63. paint1 = new Paint();64. paint1.setFlags(Paint.

30、ANTI_ALIAS_FLAG); /去除插刺65. paint2 = new Paint(paint1);66. paint3 = new Paint(paint2);67. paint3.setColor(0 x45111111);68. /paint.setShader(mShader);/其間顏色會有變化.69. paint3.setStrokeWidth(12);70. paint4 = new Paint(paint2);71. paint4.setColor(0 xff111111);72. paint4.setShader(mShader);/其間顏色會有變化.73. pain

31、t4.setStrokeWidth(12);74. 75.76.代碼就到這里了.關(guān)于三角形卷動翻頁,代碼沒有寫完整,(第三張圖片還沒有弄,也沒有陰影),先不寫了,而且似乎也不止我這樣一種寫法的,網(wǎng)上看到的翻頁還有其它的,比如我見到一個,OnDraw 里得到畫布的高,然后一行一行描述,并逐行遞減寬度,這樣造成一個三角形,速度也不那么地慢.還可接受.77.78.來些圖片.79.15.png 到 16.png,寬度越來越小了.80.12.png到14.png是三角形的,里面具體操作復(fù)雜一些,當(dāng)前差上面那張遮罩.以后再完善了.81. android 中顏色對應(yīng)的值82.文章分類:移動開發(fā)83. #FF

32、FFFF #FFFFF0 #FFFFE0 #FFFF00 #FFFAFA #FFFAF0 #FFFACD #FFF8DC #FFF5EE #FFF0F5 #FFEFD5 #FFEBCD #FFE4E1 #FFE4C4 #FFE4B5 #FFDEAD #FFDAB9 #FFD700 #FFC0CB #FFB6C1 #FFA500 #FFA07A #FF8C00 #FF7F50 #FF69B4 #FF6347 #FF4500 #FF1493 #FF00FF #FF00FF #FF0000 #FDF5E6 #FAFAD2 #FAF0E6 #FAEBD7 #FA8072 #F8F8FF #F5FFFA

33、 #F5F5F5 #F5F5DC #F5DEB3 #F4A460 #F0FFFF #F0FFF0 #F0F8FF #F0E68C #F08080 #EEE8AA #EE82EE #E9967A #E6E6FA #E0FFFF #DEB887 #DDA0DD #DCDCDC #DC143C #DB7093 #DAA520 #DA70D6 #D8BFD8 #D3D3D3 #D3D3D3 #D2B48C #D2691E #CD853F #CD5C5C #C71585 #C0C0C0 #BDB76B !-暗黃褐色 #BC8F8F #BA55D3 #B8860B #B22222 #B0E0E6 #B0C

34、4DE #AFEEEE #ADFF2F #ADD8E6 #A9A9A9 #A9A9A9 #A52A2A #A0522D #9932CC #98FB98 #9400D3 #9370DB #90EE90 #8FBC8F #8B4513 #8B008B #8B0000 #8A2BE2 !-紫羅蘭藍(lán)色 #87CEFA #87CEEB #808080 #808080 #808000 #800080 #800000 #7FFFD4 #7FFF00 #7CFC00 #7B68EE #778899 #778899 #708090 #708090 #6B8E23 #6A5ACD #696969 #696969

35、#66CDAA #6495ED #5F9EA0 #556B2F !-暗橄欖綠 #4B0082 #48D1CC #483D8B #4682B4 #4169E1 #40E0D0 #3CB371 #32CD32 #2F4F4F #2F4F4F #2E8B57 #228B22 #20B2AA #1E90FF #191970 #00FFFF #00FFFF #00FF7F #00FF00 #00FA9A #00CED1 #00BFFF #008B8B #008080 #008000 #006400 #0000FF #0000CD #00008B #000080 #000000 android ListV

36、iew 詳解 在 android 開發(fā)中 ListView 是比較常用的組件,它以列表的形式展示具體內(nèi)容,并且能夠根據(jù)數(shù)據(jù)的長度自適應(yīng)顯示。抽空把對 ListView 的使用做了整理,并寫了個小例子,如下圖。列表的顯示需要三個元素:1ListVeiw 用來展示列表的 View。2適配器 用來把數(shù)據(jù)映射到 ListView 上的中介。3數(shù)據(jù) 具體的將被映射的字符串,圖片,或者基本組件。根據(jù)列表的適配器類型,列表分為三種,ArrayAdapter,SimpleAdapter 和 SimpleCursorAdapter其中以 ArrayAdapter 最為簡單,只能展示一行字。SimpleAdapt

37、er 有最好的擴(kuò)充性,可以自定義出各種效果。SimpleCursorAdapter 可以認(rèn)為是 SimpleAdapter 對數(shù)據(jù)庫的簡單結(jié)合,可以方面的把數(shù)據(jù)庫的內(nèi)容以列表的形式展示出來。我們從最簡單的 ListView 開始:print?01 /*02 * author allin03 *04 */05 public class MyListView extends Activity 0607 private ListView listView;08 /private List data = new ArrayList();09 Override10 public void onCreat

38、e(Bundle savedInstanceState)11 super.onCreate(savedInstanceState);1213 listView = new ListView(this);14 listView.setAdapter(new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,getData();15 setContentView(listView);16 17181920 private List getData()2122 List data = new ArrayList();23

39、 data.add(測試數(shù)據(jù) 1);24 data.add(測試數(shù)據(jù) 2);25 data.add(測試數(shù)據(jù) 3);26 data.add(測試數(shù)據(jù) 4);28 return data;29 30 上面代碼使用了 ArrayAdapter(Context context, int textViewResourceId, Listobjects)來裝配數(shù)據(jù),要裝配這些數(shù)據(jù)就需要一個連接 ListView 視圖對象和數(shù)組數(shù)據(jù)的適配器來兩者的適配工作,ArrayAdapter 的構(gòu)造需要三個參數(shù),依次為 this,布局文件(注意這里的布局文件描述的是列表的每一行的布局,android.R.layou

40、t.simple_list_item_1 是系統(tǒng)定義好的布局文件只顯示一行文字,數(shù)據(jù)源(一個 List 集合)。同時用 setAdapter()完成適配的最后工作。運行后的現(xiàn)實結(jié)構(gòu)如下圖:SimpleCursorAdapter sdk 的解釋是這樣的:An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file. You can specify which columns you want, which views you want to display the co

41、lumns, and the XMLfile that defines the appearance of these views。簡單的說就是方便把從游標(biāo)得到的數(shù)據(jù)進(jìn)行列表顯示,并可以把指定的列映射到對應(yīng)的 TextView 中。 下面的程序是從電話簿中把聯(lián)系人顯示到類表中。先在通訊錄中添加一個聯(lián)系人作為數(shù)據(jù)庫的數(shù)據(jù)。然后獲得一個指向數(shù)據(jù)庫的 Cursor 并且定義一個布局文件(當(dāng)然也可以使用系統(tǒng)自帶的)。view sourceprint?01 /*02 * author allin03 *04 */05 public class MyListView2 extends Activity 0

42、7 private ListView listView;08 /private List data = new ArrayList();09 Override10 public void onCreate(Bundle savedInstanceState)11 super.onCreate(savedInstanceState);13 listView = new ListView(this);15 Cursor cursor = getContentResolver().query(People.CONTENT_URI,null, null, null, null);16 startMan

43、agingCursor(cursor);18 ListAdapter listAdapter = new SimpleCursorAdapter(this,android.R.layout.simple_expandable_list_item_1,19 cursor,20 new StringPeople.NAME,21 new intandroid.R.id.text1);23 listView.setAdapter(listAdapter);24 setContentView(listView);25 Cursor cursor = getContentResolver().query(

44、People.CONTENT_URI, null,null, null, null);先獲得一個指向系統(tǒng)通訊錄數(shù)據(jù)庫的 Cursor 對象獲得數(shù)據(jù)來源。 startManagingCursor(cursor);我們將獲得的 Cursor 對象交由 Activity 管理,這樣 Cursor 的生命周期和 Activity 便能夠自動同步,省去自己手動管理 Cursor。 SimpleCursorAdapter 構(gòu)造函數(shù)前面 3 個參數(shù)和 ArrayAdapter 是一樣的,最后兩個參數(shù):一個包含數(shù)據(jù)庫的列的 String 型數(shù)組,一個包含布局文件中對應(yīng)組件 id 的 int 型數(shù)組。其作用是自

45、動的將String 型數(shù)組所表示的每一列數(shù)據(jù)映射到布局文件對應(yīng)id 的組件上。上面的代碼,將 NAME 列的數(shù)據(jù)一次映射到布局文件的 id 為 text1 的組件上。注意:需要在 AndroidManifest.xml 中如權(quán)限:運行后效果如下圖:SimpleAdaptersimpleAdapter 的擴(kuò)展性最好,可以定義各種各樣的布局出來,可以放上 ImageView(圖片),還可以放上 Button(按鈕),CheckBox(復(fù)選框)等等。下面的代碼都直接繼承了ListActivity,ListActivity 和普通的 Activity 沒有太大的差別,不同就是對顯示 ListView做

46、了許多優(yōu)化,方面顯示而已。下面的程序是實現(xiàn)一個帶有圖片的類表。首先需要定義好一個用來顯示每一個列內(nèi)容的 xmlvlist.xmlview sourceprint?01 0207 1112 1516 21 2627 30 下面是實現(xiàn)代碼:view sourceprint?01 /*02 * author allin03 *04 */05 public class MyListView3 extends ListActivity 08 / private List data = new ArrayList();09 Override10 public void onCreate(Bundle sa

47、vedInstanceState) 11 super.onCreate(savedInstanceState);13 SimpleAdapter adapter =new SimpleAdapter(this,getData(),R.layout.vlist,14 new Stringtitle,info,img,15 new intR.id.title,R.,R.id.img);16 setListAdapter(adapter);17 1819 private ListMap getData() 20ListMap list =new ArrayListMap();22 Map map =

48、 new HashMap();23 map.put(title, G1);24 map.put(info, google 1);25 map.put(img, R.drawable.i1);26 list.add(map);2728 map = new HashMap();29 map.put(title, G2);30 map.put(info, google 2);31 map.put(img, R.drawable.i2);32 list.add(map);3334 map = new HashMap();35 map.put(title, G3);36 map.put(info, go

49、ogle 3);37 map.put(img, R.drawable.i3);38 list.add(map);3940 return list;41 42 使用 simpleAdapter 的數(shù)據(jù)用一般都是 HashMap 構(gòu)成的 List,list 的每一節(jié)對應(yīng) ListView 的每一行。HashMap 的每個鍵值數(shù)據(jù)映射到布局文件中對應(yīng) id 的組件上。因為系統(tǒng)沒有對應(yīng)的布局文件可用,我們可以自己定義一個布局 vlist.xml。下面做適配,new 一個 SimpleAdapter 參數(shù)一次是:this,布局文件(vlist.xml),HashMap 的 title 和 info,im

50、g。布局文件的組件 id,title,info,img。布局文件的各組件分別映射到 HashMap 的各元素上,完成適配。運行效果如下圖:有按鈕的 ListView但是有時候,列表不光會用來做顯示用,我們同樣可以在在上面添加按鈕。添加按鈕首先要寫一個有按鈕的 xml 文件,然后自然會想到用上面的方法定義一個適配器,然后將數(shù)據(jù)映射到布局文件上。但是事實并非這樣,因為按鈕是無法映射的,即使你成功的用布局文件顯示出了按鈕也無法添加按鈕的響應(yīng),這時就要研究一下 ListView 是如何現(xiàn)實的了,而且必須要重寫一個類繼承 BaseAdapter。下面的示例將顯示一個按鈕和一個圖片,兩行字如果單擊按鈕將刪

51、除此按鈕的所在行。并告訴你 ListView 究竟是如何工作的。效果如下:vlist2.xmlview sourceprint?01 02060708 1213 1617 22 2728 293031 36 程序代碼:view sourceprint?001 /*002 * author allin003 *004 */005 public class MyListView4 extends ListActivity 008 private ListMap mData;010 Override011 public void onCreate(Bundle savedInstanceState)

52、 012 super.onCreate(savedInstanceState);013 mData = getData();014 MyAdapter adapter = new MyAdapter(this);015 setListAdapter(adapter);016 017018 private ListMap getData() 019 ListMap list = new ArrayListMap();020021 Map map = new HashMap();022 map.put(title, G1);023 map.put(info, google 1);024 map.p

53、ut(img, R.drawable.i1);025 list.add(map);026027 map = new HashMap();028 map.put(title, G2);029 map.put(info, google 2);030 map.put(img, R.drawable.i2);031 list.add(map);032033 map = new HashMap();034 map.put(title, G3);035 map.put(info, google 3);036 map.put(img, R.drawable.i3);037 list.add(map);038

54、039 return list;040 041042 / ListView 中某項被選中后的邏輯043 Override044 protected void onListItemClick(ListView l, View v, int position,long id) 045046 Log.v(MyListView4-click,(String)mData.get(position).get(title);047 048049 /*050 * listview 中點擊按鍵彈出對話框051 */052 public void showInfo()053 new AlertDialog.Bui

55、lder(this)054 .setTitle(我的 listview)055 .setMessage(介紹.)056 .setPositiveButton(確定,new DialogInterface.OnClickListener()057 Override058 public void onClick(DialogInterface dialog, int which) 059 060 )061 .show();062067 public final class ViewHolder068 public ImageView img;069 public TextView title;07

56、0 public TextView info;071 public Button viewBtn;072 075public class MyAdapter extends BaseAdapter076077 private LayoutInflater mInflater;080 public MyAdapter(Context context)081 this.mInflater = LayoutInflater.from(context);082 083 Override084 public int getCount() 085 / TODO Auto-generated method

57、stub086 return mData.size();087 088089 Override090 public Object getItem(int arg0) 091 / TODO Auto-generated method stub092 return null;093 094095 Override096 public long getItemId(int arg0) 097 / TODO Auto-generated method stub098 return 0;099 100101 Override102public View getView(int position, Vie

58、w convertView, ViewGroupparent) 103104 ViewHolder holder = null;105 if (convertView = null) 107 holder=new ViewHolder();109 convertView = mInflater.inflate(R.layout.vlist2, null);110 holder.img = (ImageView)convertView.findViewById(R.id.img);111 holder.title = (TextView)convertView.findViewById(R.id

59、.title);112 = (TextView)convertView.findViewById(R.);113 holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);114 convertView.setTag(holder);115116 else 117118 holder = (ViewHolder)convertView.getTag();119 120122 holder.img.setBackgroundResource(Integer)mData.get(position).get(img);123 h

60、older.title.setText(String)mData.get(position).get(title);124 .setText(String)mData.get(position).get(info);125126 holder.viewBtn.setOnClickListener(new View.OnClickListener() 127128 Override129 public void onClick(View v) 130 showInfo();131 132 );133134135 return convertView;136 137 下面將對上述代碼,做詳細(xì)的解釋

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論