當前位置:首頁 > 芯聞號 > 充電吧
[導讀]本文內容:1、橫向ListView的所有實現(xiàn)思路;2、其中一個最通用的思路HorizontalListView,并基于橫向ListView開發(fā)一個簡單的相冊;3、實現(xiàn)的橫向ListView在點擊、瀏覽

本文內容:

1、橫向ListView的所有實現(xiàn)思路;

2、其中一個最通用的思路HorizontalListView,并基于橫向ListView開發(fā)一個簡單的相冊;

3、實現(xiàn)的橫向ListView在點擊、瀏覽時item背景會變色,并解決了listview里setSelected造成item的選擇狀態(tài)混亂的問題。

眾所周知,ListView默認的方向是垂直的,但有些時候人們更喜歡橫向ListView??v觀整個網絡,橫向ListView的實現(xiàn)思路如下:

1、在布局里用HorizontalScrollView包含一個ListView,參考這里;

2、利用GridView,把它的行數(shù)設為1行;

3、有人繼承ListView構造了一個HorizontalScrollListView,參見:這里

4、國外一位大牛繼承AdapterView

下面看源碼: 這是Activity的布局文件:activity_main.xml
[html] view plaincopyprint???

這是橫向listview的每個item的布局,圖片+文字,horizontal_list_item.xml [html] view plaincopyprint???
下面文件是selector_imageview_background.xml,這是大圖片你點擊瀏覽時背景發(fā)生變化的selector,沒有啥實際作用。 [html] view plaincopyprint???
下面是每個item的selector,在focus和select時顏色會發(fā)生變化:selector_item_background.xml [html] view plaincopyprint???
主程序:MainActivity.java
[java] view plaincopyprint?package?org.yanzi.testhorizontallistview;????import?org.yanzi.ui.HorizontalListView;??import?org.yanzi.ui.HorizontalListViewAdapter;????import?android.app.Activity;??import?android.os.Bundle;??import?android.view.Menu;??import?android.view.View;??import?android.widget.AdapterView;??import?android.widget.AdapterView.OnItemClickListener;??import?android.widget.ImageView;????public?class?MainActivity?extends?Activity?{??????HorizontalListView?hListView;??????HorizontalListViewAdapter?hListViewAdapter;??????ImageView?previewImg;??????View?olderSelectView?=?null;??????@Override??????protected?void?onCreate(Bundle?savedInstanceState)?{??????????super.onCreate(savedInstanceState);??????????setContentView(R.layout.activity_main);??????????initUI();??????}????????@Override??????public?boolean?onCreateOptionsMenu(Menu?menu)?{??????????//?Inflate?the?menu;?this?adds?items?to?the?action?bar?if?it?is?present.??????????getMenuInflater().inflate(R.menu.main,?menu);??????????return?true;??????}??????public?void?initUI(){??????????hListView?=?(HorizontalListView)findViewById(R.id.horizon_listview);??????????previewImg?=?(ImageView)findViewById(R.id.image_preview);??????????String[]?titles?=?{"懷師",?"南懷瑾軍校",?"閉關",?"南懷瑾",?"南公莊嚴照",?"懷師法相"};??????????final?int[]?ids?=?{R.drawable.nanhuaijin_miss,?R.drawable.nanhuaijin_school,??????????????????R.drawable.nanhuaijin_biguan,?R.drawable.nanhuaijin,??????????????????R.drawable.nanhuaijin_zhuangyan,?R.drawable.nanhuaijin_faxiang};??????????hListViewAdapter?=?new?HorizontalListViewAdapter(getApplicationContext(),titles,ids);??????????hListView.setAdapter(hListViewAdapter);??????????//??????hListView.setOnItemSelectedListener(new?OnItemSelectedListener()?{??????????//??????????//??????????@Override??????????//??????????public?void?onItemSelected(AdapterView??
HorizontalListView.java 這就是自定義的橫向listview
[java] view plaincopyprint?package?org.yanzi.ui;????/*??*?HorizontalListView.java?v1.5??*??*???*?The?MIT?License??*?Copyright?(c)?2011?Paul?Soucy?(paul@dev-smart.com)??*???*?Permission?is?hereby?granted,?free?of?charge,?to?any?person?obtaining?a?copy??*?of?this?software?and?associated?documentation?files?(the?"Software"),?to?deal??*?in?the?Software?without?restriction,?including?without?limitation?the?rights??*?to?use,?copy,?modify,?merge,?publish,?distribute,?sublicense,?and/or?sell??*?copies?of?the?Software,?and?to?permit?persons?to?whom?the?Software?is??*?furnished?to?do?so,?subject?to?the?following?conditions:??*???*?The?above?copyright?notice?and?this?permission?notice?shall?be?included?in??*?all?copies?or?substantial?portions?of?the?Software.??*???*?THE?SOFTWARE?IS?PROVIDED?"AS?IS",?WITHOUT?WARRANTY?OF?ANY?KIND,?EXPRESS?OR??*?IMPLIED,?INCLUDING?BUT?NOT?LIMITED?TO?THE?WARRANTIES?OF?MERCHANTABILITY,??*?FITNESS?FOR?A?PARTICULAR?PURPOSE?AND?NONINFRINGEMENT.?IN?NO?EVENT?SHALL?THE??*?AUTHORS?OR?COPYRIGHT?HOLDERS?BE?LIABLE?FOR?ANY?CLAIM,?DAMAGES?OR?OTHER??*?LIABILITY,?WHETHER?IN?AN?ACTION?OF?CONTRACT,?TORT?OR?OTHERWISE,?ARISING?FROM,??*?OUT?OF?OR?IN?CONNECTION?WITH?THE?SOFTWARE?OR?THE?USE?OR?OTHER?DEALINGS?IN??*?THE?SOFTWARE.??*??*/??????import?java.util.LinkedList;??import?java.util.Queue;????import?android.content.Context;??import?android.database.DataSetObserver;??import?android.graphics.Rect;??import?android.util.AttributeSet;??import?android.view.GestureDetector;??import?android.view.GestureDetector.OnGestureListener;??import?android.view.MotionEvent;??import?android.view.View;??import?android.widget.AdapterView;??import?android.widget.ListAdapter;??import?android.widget.Scroller;????public?class?HorizontalListView?extends?AdapterView??
HorizontalListViewAdapter.java 橫向listview的適配器,我將他單獨寫到一個java文件里。
[java] view plaincopyprint?package?org.yanzi.ui;????import?org.yanzi.testhorizontallistview.R;??import?org.yanzi.util.BitmapUtil;????import?android.content.Context;??import?android.graphics.Bitmap;??import?android.graphics.drawable.Drawable;??import?android.media.ThumbnailUtils;??import?android.view.LayoutInflater;??import?android.view.View;??import?android.view.ViewGroup;??import?android.widget.BaseAdapter;??import?android.widget.ImageView;??import?android.widget.TextView;????public?class?HorizontalListViewAdapter?extends?BaseAdapter{??????private?int[]?mIconIDs;??????private?String[]?mTitles;??????private?Context?mContext;??????private?LayoutInflater?mInflater;??????Bitmap?iconBitmap;??????private?int?selectIndex?=?-1;????????public?HorizontalListViewAdapter(Context?context,?String[]?titles,?int[]?ids){??????????this.mContext?=?context;??????????this.mIconIDs?=?ids;??????????this.mTitles?=?titles;??????????mInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);//LayoutInflater.from(mContext);??????}??????@Override??????public?int?getCount()?{??????????return?mIconIDs.length;??????}??????@Override??????public?Object?getItem(int?position)?{??????????return?position;??????}????????@Override??????public?long?getItemId(int?position)?{??????????return?position;??????}????????@Override??????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{????????????ViewHolder?holder;??????????if(convertView==null){??????????????holder?=?new?ViewHolder();??????????????convertView?=?mInflater.inflate(R.layout.horizontal_list_item,?null);??????????????holder.mImage=(ImageView)convertView.findViewById(R.id.img_list_item);??????????????holder.mTitle=(TextView)convertView.findViewById(R.id.text_list_item);??????????????convertView.setTag(holder);??????????}else{??????????????holder=(ViewHolder)convertView.getTag();??????????}??????????if(position?==?selectIndex){??????????????convertView.setSelected(true);??????????}else{??????????????convertView.setSelected(false);??????????}????????????????????holder.mTitle.setText(mTitles[position]);??????????iconBitmap?=?getPropThumnail(mIconIDs[position]);??????????holder.mImage.setImageBitmap(iconBitmap);????????????return?convertView;??????}????????private?static?class?ViewHolder?{??????????private?TextView?mTitle?;??????????private?ImageView?mImage;??????}??????private?Bitmap?getPropThumnail(int?id){??????????Drawable?d?=?mContext.getResources().getDrawable(id);??????????Bitmap?b?=?BitmapUtil.drawableToBitmap(d);??//??????Bitmap?bb?=?BitmapUtil.getRoundedCornerBitmap(b,?100);??????????int?w?=?mContext.getResources().getDimensionPixelOffset(R.dimen.thumnail_default_width);??????????int?h?=?mContext.getResources().getDimensionPixelSize(R.dimen.thumnail_default_height);????????????????????Bitmap?thumBitmap?=?ThumbnailUtils.extractThumbnail(b,?w,?h);????????????????????return?thumBitmap;??????}??????public?void?setSelectIndex(int?i){??????????selectIndex?=?i;??????}??}?

下圖是一個item被選定后,另一個item獲得了焦點:

要點如下: 1、可以說這個HorizontalListView是完美的,但美中不足的并不是其他人說的不能點擊、晃動、加載不全的問題,而是這個橫向Listview的高度,如果你設成wrap_cotent那么將會占據整個屏幕,即使你將它適配器里的view的高度限制死,限制成很小,這個HorizontalListView的高度依然是全屏。本文代碼里,我把圖片縮略圖弄成100dip,所以把這個HorizontalListView的高度設為了150dip。 2、在適配器里,我填充了一個圖片,下面是文字。為了能讓瀏覽圖片時item有反應,搞了一個selector,它的用法詳見這里. 但一開始在點擊時完全沒有反應。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉