亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android TreeView效果實現(xiàn)方法(附demo源碼下載)

 更新時間:2016年02月22日 09:36:22   作者:fengyee_zju  
這篇文章主要介紹了Android TreeView效果實現(xiàn)方法,結(jié)合實例形式分析了Android TreeView效果的實現(xiàn)原理與具體技巧,并附帶demo源碼供讀者下載,需要的朋友可以參考下

本文實例講述了Android TreeView效果實現(xiàn)方法。分享給大家供大家參考,具體如下:

應(yīng)該說很多的操作系統(tǒng)上面都提供了TreeView空間,實現(xiàn)樹形結(jié)構(gòu),這個樹形結(jié)構(gòu)的應(yīng)用時很廣泛的,而Google開發(fā)Android的時候出于Android手機是觸摸屏幕的考慮,用手指操作樹形結(jié)構(gòu)很不方便,從這方面考慮沒有提供TreeView的空間,而是只是提供了一個ExpandableListView:android中的二級樹型Widget,雖然已經(jīng)能滿足不少的功能需求,例如書簽的功能就可以使用這個控件,但是隨著應(yīng)用的不斷增多這個就不能滿足要求了,例如pdf中左側(cè)的目錄的功能,就需要樹形結(jié)構(gòu)來實現(xiàn)。下面的這個應(yīng)用就是基于pdf左側(cè)的目錄結(jié)構(gòu)為原型寫的,那首先貼上效果圖:

這個的思路是:按照類似于“樹”的結(jié)構(gòu)組織數(shù)據(jù),界面上直接利用大家經(jīng)常用的listview實現(xiàn)的。下面這個是節(jié)點信息的類:

public class PDFOutlineElement {
  private String id;//當(dāng)前節(jié)點的id
  private String outlineTitle ;//節(jié)點上面顯示的信息
  private boolean mhasParent ; //是否有父節(jié)點
  private boolean mhasChild ;//是否有孩子節(jié)點
  private String parent;//父節(jié)點的id
  private int level;//當(dāng)前節(jié)點所在的層次
}

在這里我想解釋一下這個level,是很關(guān)鍵的,他表示的是當(dāng)前節(jié)點所在的層次,不要小看他,正是他幫助我們在界面上顯示出來了層次效果,其實這個樹形結(jié)構(gòu)并不是樹形結(jié)構(gòu),所有的數(shù)據(jù)都維護在一個ArrayList里面,某一個節(jié)點A下面有子節(jié)點B、C,其實A、B、C這三個節(jié)點在ArrayList里面是順序存放的,如果A的層次是level,那個他的子節(jié)點的層次是level+1,我們在getView()的時候我們可以不借助系統(tǒng)自動給我們畫上,而是可以自己指定他的位置holder.icon.setPadding(25 * (level + 1), holder.icon.getPaddingTop(), 0, holder.icon.getPaddingBottom());,這樣他的子節(jié)點便具有了縮進的效果。

還有比較關(guān)鍵的點是如何實現(xiàn)“展開”和 “縮回”的效果,其實這個只不過 是當(dāng)單擊摸個節(jié)點的時候,如果這個節(jié)點下面有子節(jié)點而且是“縮回”的,就把他的所有的子節(jié)點都從那個ArrayList里面刪除調(diào),然后 notifyDataSetChanged(),同理就是“展開”的時候,就是在這個節(jié)點后面添加子節(jié)點到ArrayList里面,然后 notifyDataSetChanged()。

其實說到這里大家應(yīng)該知道怎么做了,這個樹形結(jié)構(gòu)不是真樹,而就是一個ListView,通過往ArryList里面添加刪除數(shù)據(jù)控制信息,通過setPadding()實現(xiàn)縮進

明白了這個思路,我把getView解釋一下,大家肯定能做出來

public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder holder;
  if (convertView == null) {
    convertView = mInflater.inflate(R.layout.outline, null);
    holder = new ViewHolder();
    holder.text = (TextView) convertView.findViewById(R.id.text);
    holder.icon = (ImageView) convertView.findViewById(R.id.icon);
    convertView.setTag(holder);
  } else {
    holder = (ViewHolder) convertView.getTag();
  }
  int level = mfilelist.get(position).getLevel();//每次根據(jù)節(jié)點的層次繪制顯示的位置
  holder.icon.setPadding(25 * (level + 1), holder.icon
  .getPaddingTop(), 0, holder.icon.getPaddingBottom());
  holder.icon.setVisibility(View.VISIBLE);
  holder.text.setText(mfilelist.get(position).getOutlineTitle());
       //如果有孩子而且當(dāng)前是不是展開的圖標(biāo)設(shè)置為“+”號的圖標(biāo)
  if (mfilelist.get(position).isMhasChild()
      && (mfilelist.get(position).isExpanded() == false)) {
    holder.icon.setImageBitmap(mIconCollapse);
  } else if (mfilelist.get(position).isMhasChild()
      && (mfilelist.get(position).isExpanded() == true)) {
       //如果有孩子而且當(dāng)前是不是展開的圖標(biāo)設(shè)置為“+”號的圖標(biāo)
    holder.icon.setImageBitmap(mIconExpand);
  } else if (!mfilelist.get(position).isMhasChild()){
    holder.icon.setImageBitmap(mIconCollapse);
    holder.icon.setVisibility(View.INVISIBLE);//這里不要設(shè)置為GONE,因為GONE不顯示而且不占位置的,而INVISIBLE是不顯示但是占位置的
  }
  return convertView;
}

完整實例代碼點擊此處本站下載。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對大家Android程序設(shè)計有所幫助。

相關(guān)文章

  • Android 實現(xiàn)控件懸浮效果實例代碼

    Android 實現(xiàn)控件懸浮效果實例代碼

    本篇文章主要介紹了Android 實現(xiàn)控件懸浮效果實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Flutter多選按鈕組件Checkbox使用方法詳解

    Flutter多選按鈕組件Checkbox使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Flutter多選按鈕組件Checkbox使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • BottomNavigationView?ViewPager2?Fragment底部菜單導(dǎo)航欄

    BottomNavigationView?ViewPager2?Fragment底部菜單導(dǎo)航欄

    這篇文章主要為大家介紹了BottomNavigationView?ViewPager2?Fragment底部菜單導(dǎo)航欄實現(xiàn)效果詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Android?中TextureView和SurfaceView的屬性方法及示例說明

    Android?中TextureView和SurfaceView的屬性方法及示例說明

    這篇文章主要介紹了Android?中TextureView和SurfaceView的屬性方法及示例說明,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • android音頻編輯之音頻裁剪的示例代碼

    android音頻編輯之音頻裁剪的示例代碼

    本篇文章主要介紹了android音頻編輯之音頻裁剪的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android 使用VideoView播放MP4的簡單實現(xiàn)

    Android 使用VideoView播放MP4的簡單實現(xiàn)

    這篇文章主要介紹了Android 使用VideoView播放MP4的簡單實現(xiàn),實現(xiàn)簡單的播放功能,播放手機本地的MP4文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android UI使用HorizontalListView實現(xiàn)水平滑動

    Android UI使用HorizontalListView實現(xiàn)水平滑動

    這篇文章主要為大家詳細(xì)介紹了Android UI使用HorizontalListView實現(xiàn)水平滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Native.js獲取監(jiān)聽開關(guān)等操作Android藍牙設(shè)備實例代碼

    Native.js獲取監(jiān)聽開關(guān)等操作Android藍牙設(shè)備實例代碼

    本文為大家分享了Native.js對Android藍牙設(shè)備的操作實例代碼包括:監(jiān)聽藍牙開關(guān)狀態(tài),開啟關(guān)閉藍牙,獲取藍牙設(shè)備列表,藍牙連接票據(jù)打印機
    2018-09-09
  • Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法

    Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法

    Tablayout在我們?nèi)粘i_發(fā)中經(jīng)常會遇到,下面這篇文章主要給大家介紹了在Android中修改TabLayout底部導(dǎo)航條Indicator長短的方法,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。
    2017-06-06
  • Android編程之自定義鎖屏實例分析

    Android編程之自定義鎖屏實例分析

    這篇文章主要介紹了Android編程之自定義鎖屏,結(jié)合實例形式分析了Android鎖屏的原理與自定義鎖屏的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12

最新評論