精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在Android開發中使用Gallery實現“多級聯動”

移動開發 Android
本文將講解利用兩個Gallery實現類似多級聯動的功能,在UI設計中需要利用很多圖庫相冊軟件,Gallery是國外一個免費開源的、功能非常強大、有豐富的擴展圖庫相冊軟件。

之前我們曾向您介紹過在Android中實現service動態更新UI界面,在UI設計中需要利用很多圖庫相冊軟件,而Gallery 是國外一個免費開源的、功能非常強大、有豐富的擴展圖庫相冊軟件。本文將講解利用兩個Gallery實現類似多級聯動的功能。

device

一個Gallery是歌曲專輯圖片,另一個Gallery是專輯的歌曲。滑動專輯Gallery,下面的歌曲也會隨之發生變動。

Gallery布局

主要的布局是有兩個相對布局+兩個Gallery組成的:

  1.  1: <?xml version="1.0" encoding="utf-8"?> 
  2.  2: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.  3:     android:layout_width="fill_parent"   
  4.  4:     android:layout_height="fill_parent">   
  5.  5:     <!-- 專輯 --> 
  6.  6:     <Gallery android:id="@+id/gallery" 
  7.  7:         android:layout_width="fill_parent" 
  8.  8:         android:layout_height="wrap_content" 
  9.  9:         android:layout_alignParentTop="true" 
  10. 10:         android:gravity="center_horizontal" 
  11. 11:         android:spacing="16dp" 
  12. 12:         android:unselectedAlpha="0.5"/> 
  13. 13:     <!-- 歌曲 --> 
  14. 14:     <Gallery android:id="@+id/gallery2" 
  15. 15:         android:background="#FFF" 
  16. 16:         android:layout_width="fill_parent" 
  17. 17:         android:layout_height="30dp" 
  18. 18:         android:layout_below="@id/gallery" 
  19. 19:         android:layout_alignParentLeft="true" 
  20. 20:         android:gravity="center_vertical" 
  21. 21:         android:spacing="16dp" 
  22. 22:         android:unselectedAlpha="0.5" /> 
  23. 23: </RelativeLayout> 

Gallery的適配器

在android中適配器很好的實現了MVC思想,它很好的為某些組件提供了數據和view的實現。此處我們需要通過繼承BaseAdapter,實現兩個Gallery的適配器。
 

  1.  1: /**  
  2.  2:  * 專輯  
  3.  3:  *   
  4.  4:  * @author halzhang  
  5.  5:  */  
  6.  6: public class AlbumAdapter extends BaseAdapter {  
  7.  7:    
  8.  8:     private Context context;  
  9.  9:    
  10. 10:     private Cursor cursor;  
  11. 11:    
  12. 12:     private Bitmap[] bitmaps;  
  13. 13:    
  14. 14:     public AlbumAdapter(Context context) {  
  15. 15:         this.context = context;  
  16. 16:         this.cursor = context.getContentResolver().query(  
  17. 17:                 MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, null, null,  
  18. 18:                 MediaStore.Audio.Albums.DEFAULT_SORT_ORDER);  
  19. 19:         bitmaps = new Bitmap[cursor.getCount()];  
  20. 20:         initBitmaps();  
  21. 21:     }  
  22. 22:    
  23. 23:     /**  
  24. 24:      * 初始化專輯封面圖片  
  25. 25:      */  
  26. 26:     private void initBitmaps() {  
  27. 27:         if (cursor.moveToFirst()) {  
  28. 28:             do {  
  29. 29:                 bitmaps[cursor.getPosition()] = MusicUtils.getArtwork(context, -1, cursor  
  30. 30:                         .getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID)));  
  31. 31:             } while (cursor.moveToNext());  
  32. 32:         }  
  33. 33:     }  
  34. 34:    
  35. 35:     public int getCount() {  
  36. 36:         if (cursor != null) {  
  37. 37:             return cursor.getCount();  
  38. 38:         }  
  39. 39:         return 0;  
  40. 40:     }  
  41. 41:    
  42. 42:     public Object getItem(int position) {  
  43. 43:         return position;  
  44. 44:     }  
  45. 45:    
  46. 46:     public long getItemId(int position) {  
  47. 47:         if (cursor != null) {  
  48. 48:             cursor.moveToPosition(position);  
  49. 49:             return cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Albums._ID));  
  50. 50:         }  
  51. 51:         return 0;  
  52. 52:     }  
  53. 53:    
  54. 54:     public View getView(int position, View convertView, ViewGroup parent) {  
  55. 55:         ImageView iv = new ImageView(context);  
  56. 56:         iv.setLayoutParams(new Gallery.LayoutParams(100, 100));  
  57. 57:         iv.setAdjustViewBounds(true);  
  58. 58:         iv.setImageBitmap(bitmaps[position]);  
  59. 59:         return iv;  
  60. 60:     }  
  61. 61:    
  62. 62: }  
  1.  1: /**  
  2.  2:  * 歌曲  
  3.  3:  *   
  4.  4:  * @author halzhang  
  5.  5:  */  
  6.  6: public class AudioAdapter extends BaseAdapter {  
  7.  7:    
  8.  8:     private Context context;  
  9.  9:    
  10. 10:     private Cursor cursor;  
  11. 11:     /**專輯ID*/  
  12. 12:     private int albumId;  
  13. 13:    
  14. 14:     public AudioAdapter(Context context, int albumId) {  
  15. 15:         this.context = context;  
  16. 16:         this.albumId = albumId;  
  17. 17:         this.cursor = context.getContentResolver().query(  
  18. 18:                 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,  
  19. 19:                 MediaStore.Audio.Media.ALBUM_ID + "=" + albumId, null,  
  20. 20:                 MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  
  21. 21:     }  
  22. 22:    
  23. 23:     public int getCount() {  
  24. 24:         if (cursor != null) {  
  25. 25:             return cursor.getCount();  
  26. 26:         }  
  27. 27:         return 0;  
  28. 28:     }  
  29. 29:    
  30. 30:     public Object getItem(int position) {  
  31. 31:         return position;  
  32. 32:     }  
  33. 33:    
  34. 34:     public long getItemId(int position) {  
  35. 35:         if (cursor != null) {  
  36. 36:             cursor.moveToPosition(position);  
  37. 37:             return cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID));  
  38. 38:         }  
  39. 39:         return 0;  
  40. 40:     }  
  41. 41:    
  42. 42:     public View getView(int position, View convertView, ViewGroup parent) {  
  43. 43:         cursor.moveToPosition(position);  
  44. 44:         TextView t = new TextView(context);  
  45. 45:         String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));  
  46. 46:         t.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT,  
  47. 47:                 LayoutParams.WRAP_CONTENT));  
  48. 48:         t.setText(title);  
  49. 49:         t.setTextColor(Color.BLACK);  
  50. 50:         return t;  
  51. 51:     }  
  52. 52:    
  53. 53:     /**  
  54. 54:      * 當專輯改變了,調用此方法更新adapter的數據  
  55. 55:      * @param albumId 專輯ID  
  56. 56:      */  
  57. 57:     public void notifyDataSetChanged(int albumId) {  
  58. 58:         this.cursor = context.getContentResolver().query(  
  59. 59:                 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,  
  60. 60:                 MediaStore.Audio.Media.ALBUM_ID + "=" + albumId, null,  
  61. 61:                 MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  
  62. 62:         super.notifyDataSetChanged();  
  63. 63:     }  
  64. 64:    
  65. 65: }  

Activity

  1.  1: public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener {  
  2.  2:    
  3.  3:     private Gallery album;  
  4.  4:    
  5.  5:     private Gallery audio;  
  6.  6:    
  7.  7:     private AlbumAdapter albumAdapter;  
  8.  8:    
  9.  9:     private AudioAdapter audioAdapter;  
  10. 10:    
  11. 11:     @Override  
  12. 12:     protected void onCreate(Bundle savedInstanceState) {  
  13. 13:         super.onCreate(savedInstanceState);  
  14. 14:         setContentView(R.layout.audio_player);  
  15. 15:         setupViews();  
  16. 16:     }  
  17. 17:    
  18. 18:     // 個人習慣  
  19. 19:     private void setupViews() {  
  20. 20:         album = (Gallery) findViewById(R.id.gallery);  
  21. 21:         audio = (Gallery) findViewById(R.id.gallery2);  
  22. 22:    
  23. 23:         albumAdapter = new AlbumAdapter(this);  
  24. 24:    
  25. 25:         album.setAdapter(albumAdapter);  
  26. 26:    
  27. 27:         int aid = (int) albumAdapter.getItemId(0);  
  28. 28:    
  29. 29:         audioAdapter = new AudioAdapter(this, aid);  
  30. 30:         audio.setAdapter(audioAdapter);  
  31. 31:    
  32. 32:         audio.setOnItemSelectedListener(this);  
  33. 33:         album.setOnItemSelectedListener(this);  
  34. 34:     }  
  35. 35:    
  36. 36:     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {  
  37. 37:         if (parent == album) {  
  38. 38:             // 專輯被選中  
  39. 39:             int aid = (int) albumAdapter.getItemId(position);  
  40. 40:             // 更新歌曲Gallery  
  41. 41:             audioAdapter.notifyDataSetChanged(aid);  
  42. 42:         } else if (parent == audio) {  
  43. 43:             // TODO do something  
  44. 44:         }  
  45. 45:    
  46. 46:     }  
  47. 47:    
  48. 48:     public void onNothingSelected(AdapterView<?> parent) {  
  49. 49:    
  50. 50:     }  

好了,這就是我們介紹的在Android開發中使用Gallery實現“多級聯動”的教程,謝謝大家。

【編輯推薦】

  1. 在Android中實現service動態更新UI界面
  2. Android的UI設計與后臺線程交互
  3. 有效控制Android應用程序的耗電量
  4. 在Android上實現Junit單元測試的四部曲
  5. Android數據庫事務淺析

 

責任編輯:佚名 來源: 博客園
相關推薦

2023-12-22 09:11:45

AndroidNFC移動開發

2024-04-30 11:02:15

二級聯動鴻蒙開源

2020-07-07 09:19:28

Android 協程開發

2020-04-08 09:06:34

Android 協程開發

2018-03-26 14:25:55

KubernetesSkaffold命令

2012-04-19 12:58:26

TitaniumJSS

2020-04-23 09:33:32

Android 協程開發

2011-04-19 17:24:09

JavaScript二級聯動下拉框

2009-07-16 14:22:02

Windows Emb

2010-01-28 17:07:03

Android Gal

2011-08-18 13:58:34

iPhone開發NSOperation異步

2013-06-25 11:21:35

Android開發幻燈片效果Gallery

2012-12-27 13:04:17

Android開發SQLite數據庫

2022-06-07 19:48:07

TraefikProxy插件

2012-02-13 14:22:22

MonoTouchiOS應用Visual Stud

2009-12-09 16:42:55

PHP二級聯動菜單

2009-06-25 16:49:24

Hibernate

2013-12-13 17:21:14

Lua腳本語言

2023-11-17 12:04:39

GORM并發
點贊
收藏

51CTO技術棧公眾號

91视频com| 国产精品自在线拍| 国产精品区一区二区三区| 国产一区欧美二区三区| 久操视频免费在线观看| 欧美爱爱网站| 欧美三级资源在线| 免费极品av一视觉盛宴| 免费在线观看污视频| 久久精品国产**网站演员| 欧美疯狂xxxx大交乱88av| 全黄一级裸体片| 国产精品久久久久久久久久久久久久久 | a级片在线播放| 性色一区二区三区| 久久国产色av| 久久久久亚洲av无码a片| 精品视频在线播放一区二区三区| 欧美日韩午夜激情| 成年人免费观看的视频| 视频三区在线观看| 国产精品白丝jk白祙喷水网站| 欧美综合第一页| 天天干中文字幕| 欧美色图一区| 亚洲精品中文字幕av| 9191在线视频| 深夜福利亚洲| 欧美午夜精品久久久久久浪潮| 五月天综合婷婷| 久久久久久女乱国产| av在线播放不卡| 亚洲尤物视频网| 一区二区三区免费在线| 久久深夜福利| 欧美亚洲成人精品| 国产午夜免费视频| 93在线视频精品免费观看| 亚洲欧美日韩成人| av无码一区二区三区| 盗摄牛牛av影视一区二区| 91精品国产欧美一区二区18 | 宅男在线精品国产免费观看| 国产福利小视频在线观看| 99久久久国产精品免费蜜臀| 国产精品久久久久久久久久久久冷 | 欧美日韩日日夜夜| av网站在线观看不卡| а√在线中文网新版地址在线| 亚洲精品伦理在线| 日韩video| 日本不卡高字幕在线2019| av影院在线播放| 在线视频婷婷| 精品福利一区| 欧美一级艳片视频免费观看| 怡红院亚洲色图| 91精品国产66| 欧美日韩中文字幕一区二区| 日本中文字幕高清| 成人精品动漫| 欧美日韩国产bt| 免费在线观看污网站| 91成人app| 欧美一级高清片| 亚洲精品一区二区18漫画| 9l亚洲国产成人精品一区二三| 精品久久久三级丝袜| 扒开伸进免费视频| 日本三级久久| 伊人男人综合视频网| 刘亦菲国产毛片bd| 一本精品一区二区三区| 色综合老司机第九色激情| 久草免费新视频| 99国产精品久久久久久久成人热| 欧美在线激情视频| 国产成人精品一区二区色戒| 国产综合久久久久影院| 不卡一区二区三区四区五区| 免费av一级片| 国产网站一区二区| 天天做天天爱天天高潮| 日本大片在线播放| 色综合激情久久| 天天操,天天操| h视频久久久| 亚洲欧美日韩精品久久| 亚洲天堂网av在线| 亚洲国产片色| 国产精品视频一区国模私拍| 国产wwwxxx| 久久影视一区二区| 国产a级片免费看| 日韩专区av| 91国内精品野花午夜精品 | 美女视频久久久| 欧美亚韩一区| 国产精品成人播放| 亚洲a视频在线观看| 2023国产精品视频| 亚洲在线色站| 国产美女高潮在线| 欧美精选一区二区| 少妇户外露出[11p]| 99久久99久久精品国产片桃花 | 日干夜干天天干| 奇米一区二区三区av| 成人在线看片| 在线免费观看黄色av| 亚洲午夜精品17c| 中文字幕亚洲乱码| 日韩激情毛片| 欧美高清在线观看| 亚洲一级特黄毛片| 96av麻豆蜜桃一区二区| 国产女人18毛片| 欧美日韩123区| 精品乱人伦一区二区三区| 一级片久久久久| 国产精品人人爽人人做我的可爱| 91天堂在线观看| 国产小视频在线播放| 亚洲一区二区视频在线| 九九热免费在线观看| 国产剧情在线观看一区| 97在线观看免费高清| www.色视频| 亚洲欧洲一区二区三区| 亚洲一区二区蜜桃| 日韩最新在线| 91黑丝高跟在线| 免费观看黄色av| 一区二区三区四区激情| 五月天婷婷影视| 少妇伦子伦精品无吗| 91色在线看| 日韩欧美在线网站| 性欧美videos| 精品亚洲porn| 在线视频不卡一区二区| 久久久久毛片| 日韩中文字幕av| 超碰在线免费97| 久久久天堂av| 久久精品一区二| 亚州av日韩av| 91精品国产高清自在线| 婷婷五月综合激情| 午夜日韩在线观看| 国产精品无码电影| 亚洲一区二区网站| 久久国产一区二区| 在线女人免费视频| 亚洲区中文字幕| 日韩一级片中文字幕| 国产亚洲精久久久久久| 无码日韩人妻精品久久蜜桃| 国产a久久精品一区二区三区| 日韩av高清不卡| 成人精品一区二区三区校园激情| 欧美性色aⅴ视频一区日韩精品| 亚洲自拍偷拍图| 麻豆精品视频在线| 国产大尺度在线观看| 日韩中文字幕无砖| 欧美精品999| 青青草在线免费观看| 欧美性一区二区| 丝袜 亚洲 另类 欧美 重口| 丁香五精品蜜臀久久久久99网站 | 黄色大片在线| 日韩禁在线播放| 中文无码av一区二区三区| 国产精品久久精品日日| aaaaa黄色片| 亚洲一区二区免费看| 亚洲一区二区三区四区中文| 欧美日韩黄色| 欧美专区在线观看| 天堂中文8资源在线8| 精品人伦一区二区色婷婷| 日本少妇做爰全过程毛片| 久久久www免费人成精品| 欧美日韩一区二区三区69堂| 亚洲午夜在线| 色播亚洲视频在线观看| 久久伦理中文字幕| 91av视频在线免费观看| 免费黄色电影在线观看| 亚洲国产精久久久久久久| 亚洲成熟少妇视频在线观看| 亚洲欧美日韩国产手机在线| 9.1成人看片| 国产中文字幕精品| 欧美黄网站在线观看| 亚洲女同一区| 日本一区不卡| 9l视频自拍蝌蚪9l视频成人| 国产精品午夜国产小视频| 蜜臀av国内免费精品久久久夜夜| 亚洲性生活视频在线观看| www.成人在线观看| 91久久香蕉国产日韩欧美9色| 黄色一级视频在线观看| 国产欧美精品一区二区色综合| 亚洲性图第一页| 麻豆一区二区三区| 欧美日韩亚洲一| 亚洲欧美亚洲| 亚洲韩国在线| 视频福利一区| 成人免费观看网站| 国产精品天堂蜜av在线播放 | 99久re热视频精品98| 免费精品国产| 精品伊人久久大线蕉色首页| 久久99成人| 国产日韩欧美中文| 欧美日韩不卡| 欧美在线免费看| free性欧美| 欧美日韩成人黄色| 免费在线看黄网站| 中文字幕日韩在线视频| 精品资源在线看| 国产丝袜精品第一页| 欧美自拍第一页| 精品国产免费一区二区三区香蕉| 国产色综合视频| 欧美日韩国产影片| 自拍偷拍第八页| 欧美亚洲国产怡红院影院| 久久久久久久久久久久久av| 婷婷久久综合九色综合伊人色| 欧美日韩精品在线观看视频 | 最近中文字幕2019免费| 蜜桃视频在线免费| 日韩国产精品一区| 天天综合网在线| 亚洲精品99久久久久中文字幕| 亚洲第一视频在线| 精品精品欲导航| 亚洲高清视频网站| 精品伦理精品一区| 少妇精品高潮欲妇又嫩中文字幕| 精品国产乱码久久久久久浪潮| www精品国产| 精品三级av在线| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 欧美成人猛片aaaaaaa| 99国产成人精品| 日韩三级电影网址| 亚洲卡一卡二卡三| 亚洲国产精品va在看黑人| 十八禁一区二区三区| 亚洲精品99久久久久| 免费看男男www网站入口在线| 亚洲欧美精品中文字幕在线| 国产福利电影在线| www.xxxx欧美| 伊人影院在线视频| 高清欧美电影在线| 天堂网在线最新版www中文网| 日本成人激情视频| 成人精品国产亚洲| 91在线观看免费高清完整版在线观看| 免费观看在线一区二区三区| 豆国产97在线| 免费av一区二区三区四区| 视频一区视频二区视频三区视频四区国产| 欧美性感美女一区二区| 天天做天天爱天天高潮| 亚洲美女黄网| 欧在线一二三四区| 久草这里只有精品视频| 95视频在线观看| 久久久综合激的五月天| 国产91在线播放九色| 亚洲最大色网站| 黄色免费av网站| 欧美电影在线免费观看| 色婷婷综合视频| 中文字幕在线看视频国产欧美在线看完整| caopeng在线| 日本不卡免费高清视频| 国产日韩一区二区三免费高清| 国产视频在线观看一区| 成人精品天堂一区二区三区| 男人添女荫道口喷水视频| 久久国产一二区| 国产精品中文久久久久久| 久久综合精品国产一区二区三区| 国产馆在线观看| 姬川优奈aav一区二区| 一区二区三区午夜| 亚洲精品网址在线观看| 亚洲电影视频在线| 国产成人中文字幕| 9l亚洲国产成人精品一区二三 | 成人午夜电影免费在线观看| 精品产国自在拍| 农民人伦一区二区三区| 精品综合免费视频观看| 国产亚洲色婷婷久久99精品91| 国产精品卡一卡二| 看片网址国产福利av中文字幕| 欧美一区二区视频观看视频| 国产小视频在线观看| 国内精品免费午夜毛片| 少妇高潮一区二区三区99| 欧美日韩一区二区三区在线观看免| 欧美暴力喷水在线| jizz大全欧美jizzcom| 91原创在线视频| 九九热精品在线观看| 欧美日韩亚州综合| 免费在线视频你懂得| 午夜精品视频网站| 日韩三级精品| 中文字幕精品—区二区日日骚| 久久久国产亚洲精品| 亚洲 欧美 日韩在线| 亚洲人午夜精品天堂一二香蕉| av首页在线观看| 亚洲免费影视第一页| 9999精品成人免费毛片在线看| 亚洲国产激情| 国产 福利 在线| 国产成a人亚洲精品| 亚洲一二三四五六区| 在线观看日产精品| 欧美日韩伦理片| 欧美**vk| 免费无码毛片一区二三区| 国产一区二区三区黄视频 | 一区二区三区网站| 网站一区二区三区| 国产日产精品1区| 午夜婷婷在线观看| 亚洲美女av在线播放| 老司机深夜福利在线观看| 国产精品一区二区三区四区五区| 国产精品s色| 日本少妇一级片| 亚洲综合免费观看高清完整版在线 | 精品欧美一区二区三区在线观看 | 97人妻精品一区二区免费| 精品人伦一区二区三区蜜桃免费| 天天操天天干天天舔| 91精品国产电影| 亚洲日本三级| 日本成人黄色网| 国产午夜精品一区二区三区四区| 无码人妻黑人中文字幕| 亚洲天堂av网| jizz亚洲女人高潮大叫| 正在播放一区| 国产激情一区二区三区四区 | 欧美亚洲综合网| 在线免费看a| 99国精产品一二二线| 亚洲黄页一区| 色婷婷av777| 欧美日韩国产影片| 七七成人影院| 久久久福利视频| 欧美a级一区二区| 亚洲天堂黄色片| 亚洲国产高清高潮精品美女| 在线视频cao| 亚洲视频在线二区| 国产成人免费视频网站高清观看视频| 日产亚洲一区二区三区| 国产一区二区三区久久精品 | 国产一区二区精品在线| 免费日韩视频| 看黄色录像一级片| 精品国产一区二区三区不卡 | 日韩视频三区| 欧美福利第一页| 精品国产乱子伦一区| 亚洲一区二区三区四区| 久久福利一区二区| 91视频在线观看免费| 91成人在线免费| 欧美在线xxx| 中文字幕一区二区三区在线视频| 美女又爽又黄免费| 成人动漫在线一区| 视频一区视频二区视频三区视频四区国产 | 69堂精品视频在线播放| 国产成人生活片| 久久美女艺术照精彩视频福利播放 | 91视频免费看片| 亚洲а∨天堂久久精品喷水| 成人做爰视频www网站小优视频| 一本色道久久88亚洲精品综合| 久久精品亚洲精品国产欧美kt∨| 成人1区2区3区|