關(guān)于ImageView圖片點擊切換前景圖片實現(xiàn)CheckBox的功能

今天項目需求碰到了一個問題炫惩,廢話不多說了上圖僻弹,如下點擊右邊ImageView動態(tài)去切換ImageView的狀態(tài),代碼如下:


packagecom.silver.clound.adapter;

importandroid.app.Activity;

importandroid.content.Context;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.ImageView;

importandroid.widget.TextView;

importcom.silver.clound.R;

importcom.silver.clound.model.SongsBean;

importjava.util.HashMap;

importjava.util.List;

/**

* Created by joe on 2017/3/6.

*/

public classMusicAdapterextendsBaseAdapter? {

privateContextcontext;

privateListlist;

//圖片是否被選中

private booleanisChoice=false;

privateHashMapivMap=newHashMap<>();

publicMusicAdapter(Activity mActivity,List list) {

this.context= mActivity;

this.list= list;

for(inti =0;i < list.size();i++) {

ivMap.put(i,isChoice);

}

}

@Override

public intgetCount() {

returnlist.size();

}

@Override

publicObjectgetItem(inti) {

returnlist.get(i);

}

@Override

public longgetItemId(inti) {

returni;

}

privateViewHolderholder;

@Override

publicViewgetView(final inti,View view,ViewGroup viewGroup) {

if(view ==null) {

holder=newViewHolder();

//引入布局

view = View.inflate(context,R.layout.item_music_listview, null);

//實例化對象

holder.song= (TextView) view.findViewById(R.id.tv_song);

holder.singer= (TextView) view.findViewById(R.id.tv_singer);

holder.ivChoice= (ImageView) view.findViewById(R.id.iv_choice);

view.setTag(holder);

}else{

holder= (ViewHolder) view.getTag();

}

//給控件賦值

holder.song.setText(list.get(i).song.toString());

holder.singer.setText("("+list.get(i).singer.toString() +")");

holder.ivChoice.setImageResource(ivMap.get(i)?R.drawable.select_circle:R.drawable.ic_file_circle);

holder.ivChoice.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

ivMap.put(i,!ivMap.get(i));

if(ivMap.get(i)) {

holder.ivChoice.setImageResource(ivMap.get(i)?R.drawable.select_circle:R.drawable.ic_file_circle);

notifyDataSetChanged();

}

}

});

returnview;

}

classViewHolder {

TextViewsong;//歌曲名

TextViewsinger;//歌手

ImageViewivChoice;//選中與否的圖片

}

}

點擊事件無論如何都沒辦法立刻去切換ImageView的前景圖片只有滑動到item消失再重新加載才會根據(jù)map中boolean值來設(shè)置圖片前景(忘了notifyDataSetChanged();了)他嚷,查看setImageResource()源碼


翻譯:這個方法是在UI線程中對圖片讀取和解析的,所以有可能對一個Activity的啟動造成延遲蹋绽。所以如果顧慮到這個官方建議用setImageDrawable和setImageBitmap來代替。所以我們使用setImageBitmap或者setImageDrawable來設(shè)置圖片筋蓖,來看源碼解析


@android.view.RemotableViewMethod

public void setImageBitmap(Bitmap bm) {

// if this is used frequently, mayhandle bitmaps explicitly

// to reduce the intermediate drawable object

setImageDrawable(newBitmapDrawable(mContext.getResources(), bm));

}

實際上setImageBitmap做的事情就是把Bitmap對象封裝成Drawable對象,然后調(diào)用setImageDrawable來設(shè)置圖片卸耘。因此代碼里面才寫上了建議,如果需要頻繁調(diào)用這個方法的話最好自己封裝個固定的Drawable對象,直接調(diào)用setImageDrawable,這樣可以減少Drawable對象。因為每次調(diào)用setImageBitmap方法都會對Bitmap對象new出一個Drawable粘咖。

setImageDrawable參數(shù)是Drawable,也是可以接受不同來源的圖片,方法中所做的事情就是更新ImageView的圖片蚣抗。上面兩個方法實際上最后調(diào)用的都是setImageDrawable(setImageResource沒有直接調(diào)用,不過更新的方法與setImageDrawable一樣)。

所以綜合來看setImageDrawable是最省內(nèi)存高效的,如果擔(dān)心圖片過大或者圖片過多影響內(nèi)存和加載效率,可以自己解析圖片然后通過調(diào)用setImageDrawable方法進行設(shè)置瓮下。

好了以上小弟的真知灼見翰铡,只能寫這么些啦6塾颉!两蟀!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末网梢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赂毯,更是在濱河造成了極大的恐慌战虏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件党涕,死亡現(xiàn)場離奇詭異烦感,居然都是意外死亡,警方通過查閱死者的電腦和手機膛堤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門手趣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肥荔,你說我怎么就攤上這事绿渣。” “怎么了燕耿?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵中符,是天一觀的道長。 經(jīng)常有香客問我誉帅,道長淀散,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任蚜锨,我火速辦了婚禮档插,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亚再。我一直安慰自己郭膛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布针余。 她就那樣靜靜地躺著饲鄙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圆雁。 梳的紋絲不亂的頭發(fā)上忍级,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音伪朽,去河邊找鬼轴咱。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的朴肺。 我是一名探鬼主播窖剑,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼戈稿!你這毒婦竟也來了西土?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鞍盗,失蹤者是張志新(化名)和其女友劉穎需了,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體般甲,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡肋乍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了敷存。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墓造。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锚烦,靈堂內(nèi)的尸體忽然破棺而出觅闽,到底是詐尸還是另有隱情,我是刑警寧澤涮俄,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布谱煤,位于F島的核電站,受9級特大地震影響禽拔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜室叉,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一睹栖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茧痕,春花似錦野来、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至令野,卻和暖如春舀患,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背气破。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工聊浅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓低匙,卻偏偏與公主長得像旷痕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子顽冶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容