Android自定义空间实现wifi信号强度

学了一段时间android,对于android也是摸着石头过河,不断的看源码,看android SDK,看博客来搜集各种知识,其中大家的博客我还是很喜欢的,显得还是很亲切的。也反映了大家真实的想法与生活,又不是那么单调。。感谢各位大大的真实博客,同时希望各位路过的博友多多评论多多交流!!

不多说废话,今天主要针对android绘制自己的wifi信号强度表示,两种方法:一种是通过继承view类使用Canvaspaint绘制信号(我尝试后感觉比较麻烦并且绘制出来的效果自己也不太满意) 第二种:使用自定义控件,信号强度通过darwable/图片变化来显示,开发效率较高。

这里我讲述第二种方法。

                    

1. 自定义控件,变化使用Darwable中的图片来实现变化效果

1.1 制作控件格局

新建xml文件,名称为wifi_bitmap.xml,里面放入TextViewImageView控件,

                  

对应的布局代码为:

<?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");

}

}

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

飞扬小米(记)

 

更多相关文章

  1. Android高手进阶教程(三)之----Android(安卓)中自定义View的应用
  2. Android(安卓)wifi驱动的移植 realtek 8188
  3. Android日志系统Logcat源代码简要分析
  4. Android应用程序框架层和系统运行库层日志系统源代码分析
  5. Android中获取文本宽度和高度
  6. Android控件之TextView全解析
  7. Android布局之AbsoluteLayout和FrameLayout
  8. Android(安卓)中,应用程序需要的图片资源如何针对不同屏幕大小手
  9. android 代码设置EditText的hint字符

随机推荐

  1. 良心国产工具,比Xshell好用还免费!
  2. 如何成为一名大数据工程师?
  3. 做了这么久的 DBA,你真的认识 MySQL 数据
  4. 一条测试路由引起的业务生死告警
  5. 六个人如何运维一万台服务器?
  6. 对误操作说“NO”,DevOps 三十六计之日常
  7. 大数据运维架构师培训(4):Oozie,Flume,Sqoop
  8. 数据结构之栈与队列(一)
  9. 基本数据类型及内置方法
  10. 大数据运维架构师培训(1):Zookeeper,Hadoop(HD