【亲测有效】ListView中item点击后变色(原来是透明的,点下变橙色抬手之后还是橙色)...

本文探讨了如何在Android应用中通过状态管理实现视图动态变化,包括按下不松手颜色变化和视图点击时的交互效果。重点介绍了如何在布局中使用XML选择器设置不同状态下的视图样式,并在适配器中实现点击事件的智能响应,以达到动态调整UI的目的。此外,文章还指出了当使用特定组件如VideoView时,原有方案可能失效,并提出了应对策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先在drawable里写个 item_selector_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="
//这里是设置按下不松手时候的颜色,也可以单纯用颜色 @android:color/xxx 
//在colors里设置例如 <color name="transparent">#00000000</color> 这样
<item android:state_pressed="true" android:drawable="@drawable/list_item_p" />
<item android:drawable="@android:color/transparent"/>//默认时候颜色
</selector>

然后在layout里把item布局background设为这个item_selector_bg.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"
    android:background="@drawable/item_selector_bg"  
    android:orientation="horizontal"  
    >

然在baseadapter中的getview()方法里

convertView.setTag(position);  
   convertView.setOnClickListener(new View.OnClickListener() {  
         
       @Override  
       public void onClick(View v) {  
           // TODO Auto-generated method stub  
           if(oldView == null){  
               //第一次点击   
               oldView = v;  
               v.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_item_p));  
           }else{  
               //非第一次点击   
               //把上一次点击的 变化  
               oldView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.item_selector_bg));                     
           v.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_item_p));       
               //保存oldView          
             oldView = v;  
           }  
             
       }  
   });
//这一段是状态保存
if(oldView != null && (position == (Integer)oldView.getTag())){// 为点击 item  
       convertView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.list_item_p));  
   }else{  
      convertView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.item_selector_bg));      
    }

后来我发现因为我写的是VideoView,这个思路不适用,VideoView应该是根据当前播放什么,而使相应的item变色

转载于:https://my.oschina.net/u/2531348/blog/609425

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值