您的位置:首页 > 移动开发 > Android开发

13-5-16 Android自定义空间实现wifi信号强度

2013-05-16 11:13 375 查看
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");

}

}

**********************************************************************

飞扬小米(记)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: