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那一张图片


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。