Android自定义空间实现wifi信号强度
学了一段时间android,对于android也是摸着石头过河,不断的看源码,看android SDK,看博客来搜集各种知识,其中大家的博客我还是很喜欢的,显得还是很亲切的。也反映了大家真实的想法与生活,又不是那么单调。。感谢各位大大的真实博客,同时希望各位路过的博友多多评论多多交流!!
不多说废话,今天主要针对android绘制自己的wifi信号强度表示,两种方法:一种是通过继承view类使用Canvas和paint绘制信号(我尝试后感觉比较麻烦并且绘制出来的效果自己也不太满意) 第二种:使用自定义控件,信号强度通过darwable/图片变化来显示,开发效率较高。
这里我讲述第二种方法。
1. 自定义控件,变化使用Darwable中的图片来实现变化效果
1.1 制作控件格局
新建xml文件,名称为wifi_bitmap.xml,里面放入TextView和ImageView控件,
对应的布局代码为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/bitmap_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/bitmap_icon"
android:layout_width="match_parent"
android:layout_height="34dp"
android:src="@drawable/wifisignal4" />
<TextView
android:id="@+id/bitmap_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="30dB" />
</LinearLayout>
</LinearLayout>
1.2 描述自己定义的控件类继承LinearLayout,导入刚刚的布局实现控件自定义
接下来写一个类继承LinearLayout,导入刚刚的布局,并且设置需要的方法,从而使的能在代码中控制这个自定义控件内容的显示。其中有个判断是否为编辑状态是少的,有兴趣的朋友可以查查。
对应的类的名称为:Wifi_bitmap.class ::LinearLayout
package com.bitmap;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Wifi_bitmap extends LinearLayout{
ImageView imageview;
TextView textview;
public Wifi_bitmap(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public Wifi_bitmap(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context
.LAYOUT_INFLATER_SERVICE);//???
inflater.inflate(R.layout.wifi_bitmap, this);//get layout of bitmap
if(isInEditMode())/*it necessary to avoid the error of::
*Use View.isInEditMode() in your custom views to skip code when shown.
*when we edit the code
*/
return ;
imageview = (ImageView)findViewById(R.id.bitmap_icon);
textview = (TextView)findViewById(R.id.bitmap_txt);
}
/*
* set ImageView resource
*/
public void setImageResource(int resId){
imageview.setImageResource(resId);
}
/*
* set textView resource
*/
public void setTextViewText(String text){
textview.setText(text);
}
/*
* define the strong of signal
* strong: 0 1 2 3 4
*/
public void setSignalStrong(int strong, String db){
switch(strong){
case 0:
imageview.setImageResource(R.drawable.wifisignal0);
break;
case 1:
imageview.setImageResource(R.drawable.wifisignal1);
break;
case 2:
imageview.setImageResource(R.drawable.wifisignal2);
break;
case 3:
imageview.setImageResource(R.drawable.wifisignal3);
break;
case 4:
imageview.setImageResource(R.drawable.wifisignal4);
break;
default:
break;
}
textview.setText(db);
}
}
1.3 在activity_main.xml中加入刚才制作的控件
我们通过在activity_main.xml中加入自己定义的控件,将控件显示在activity_main.xml上面,自己就直接可以查看,我加入了五个来比对效果,这里只放入一个。下面代码是在activity_main.xml中的代码。其中完整的包命是不可少的。
<com.bitmap.Wifi_bitmap
android:id="@+id/wifi_pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:orientation="vertical"
android:paddingLeft="15dp" >
</com.bitmap.Wifi_bitmap> />
1.4 最后一步写我们自己的主程序
最后我贴上代码跟图片:
自己的主要工作就是创建一个布局xml,为这个布局定义一个继承类,最后在主程序上面和主布局上面应用,四个步骤。
package com.bitmap;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Wifi_bitmap wifi_bitmap = (Wifi_bitmap)findViewById(R.id.wifi_pic);
Wifi_bitmap wifi_bitmap1 = (Wifi_bitmap)findViewById(R.id.Wifi_bitmap01);
Wifi_bitmap wifi_bitmap2 = (Wifi_bitmap)findViewById(R.id.Wifi_bitmap02);
Wifi_bitmap wifi_bitmap3 = (Wifi_bitmap)findViewById(R.id.Wifi_bitmap03);
Wifi_bitmap wifi_bitmap4 = (Wifi_bitmap)findViewById(R.id.Wifi_bitmap04);
wifi_bitmap.setSignalStrong(4, "-20dB");
wifi_bitmap1.setSignalStrong(3, "-40dB");
wifi_bitmap2.setSignalStrong(2, "-60dB");
wifi_bitmap3.setSignalStrong(1, "-80dB");
wifi_bitmap4.setSignalStrong(0, "-100dB");
}
}
**********************************************************************
飞扬小米(记)