Android ImageView根据不同的状态和等级显示不同的图片
最近还是在做一个关于wifi的项目,要通过一个图片显示一个热点的信号强度和是否需要密码
就像这样的:
一个热点的信号强度有四个等级,有需要密码和不需要两个状态。
要实现这个功能,可以在代码中判断它的状态、强度,然后setImageResource。但这样比较繁琐。
看了Android Settings wifi模块的源码之后发现有个更简便的办法。
java代码中找到signal的ImageView、设置它的等级、状态:
ImageView signal = (ImageView) convertView.findViewById(R.id.signal); if (accessPoint.getRssi() == Integer.MAX_VALUE) { signal.setImageDrawable(null); } else { signal.setImageLevel(accessPoint.getLevel()); signal.setImageState((accessPoint.getSecurity() != AccessPoint.SECURITY_NONE) ? AccessPoint.STATE_SECURED : AccessPoint.STATE_NONE, true); }
界面放好imageview的位置、android:src="@drawable/wifi_signal_light"
<ImageView android:id="@+id/signal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:contentDescription="@null" android:src="@drawable/wifi_signal_light" />
wifi_signal_light.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res/com.mango.gnet"> <item settings:state_encrypted="true" android:drawable="@drawable/wifi_signal_lock_light" /> <item settings:state_encrypted="false" android:drawable="@drawable/wifi_signal_open_light" /> </selector>
最后就是wifi_signal_lock_light和wifi_signal_open_light两个文件
<level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_lock_signal_1_light" /> <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_lock_signal_2_light" /> <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_lock_signal_3_light" /> <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_lock_signal_4_light" /> </level-list>
<level-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1_light" /> <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2_light" /> <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3_light" /> <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4_light" /> </level-list>
总体的思路就是
signal.setImageState()
会根据设定的状态来决定用那个文件
setImageLevel()
会根据设定的数组来决定用 level-list那一张图片
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。