自定义控件0

简介: 自定义控件的最简单方法就是继承这个控件。 这次我们来重写一个TextView,让系统自带textview的左边加上一个图标。 效果如下: 实现方法: package com.

自定义控件的最简单方法就是继承这个控件。

这次我们来重写一个TextView,让系统自带textview的左边加上一个图标。

效果如下:



实现方法:

package com.xys.widget;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;

public class IconTextView extends TextView {
	
	//命名空间
	private final String namespace="http://com.xys";
	//资源ID
	private int resourceID=0;
	private Bitmap bitmap;
	
	public IconTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		//该方法用于获得该控件属性的值
		resourceID=attrs.getAttributeResourceValue(namespace, "iconSrc",0);
		if(resourceID>0){
			bitmap=BitmapFactory.decodeResource(getResources(), resourceID);
		}
	}

	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		if(bitmap!=null){
			//从原图上截取图像区域  本例为原图
			Rect src=new Rect();
			//复制到目标区域
			Rect target=new Rect();
			src.left=0;
			src.top=0;
			src.right=bitmap.getWidth();
			src.bottom=bitmap.getHeight();
			int textHeight=(int)getTextSize();
			
			target.left=0;
			//文本不是从顶端开始绘制的
			target.top=(int)((getMeasuredHeight()-getTextSize())/2)+1;
			target.bottom=target.top+textHeight;
			//根据图像高度计算宽度
			target.right=(int)(textHeight*bitmap.getWidth()/(float)bitmap.getHeight());
			canvas.drawBitmap(bitmap, src, target, getPaint());
			//将textview右移2像素
			canvas.translate(target.right+2, 0);
		}
		//父类的onDrow一定要在translate方法后执行
		super.onDraw(canvas);
	}
}
布局文件中的使用方法:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:mobile="http://com.xys"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/hello_world">
    </TextView>
    
    <com.xys.widget.IconTextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="IconTextView"
        mobile:iconSrc="@drawable/folder" >

    </com.xys.widget.IconTextView>

</RelativeLayout>

目录
相关文章
WPF自定义控件05:ToggleButton
本文重点介绍WPF中如何实现自定义ToggleButton控件,它是一个开关控件,通过单击来进行状态的快速切换。
5202 0
WPF自定义控件05:ToggleButton
|
XML C# 数据格式
WPF中用户控件和自定义控件
无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对已有控件的封装,实现功能重用。但是两者还是有一些区别,本文对这两种控件进行讲解。
355 0
|
数据可视化 前端开发 C#
WPF自定义控件的三种方式
某些场景下,我们确实需要创建新的控件。此时,理解 WPF不同控件的创建方法就显得非常重要。 WPF 提供3个用于创建控件的方法,每个方法都提供不同的灵活度。
913 1
WPF自定义控件的三种方式
C#自定义控件
1 添加自定义属性
161 0
WPF自定义控件07:FlatTextBox
本文将介绍一下自定义的文本框控件FlatTextBox,它与FlatCheckBox实现过程非常类似,它是继承自TextBox,但使用自定义的UI样式来美化界面,并添加了特有的一些依赖属性。
549 0
WPF自定义控件07:FlatTextBox
WPF自定义控件09:FlatWaveButton
按钮在很多应用程序中都是必不可少的控件,如果给按钮控件添加一些动画效果,比如单击它后会显示一个水波纹扩散的动画效果,那么感觉上更加的高级。本文将介绍一下自定义水波纹按钮控件FlatWaveButton,它是一个UserControl(FlatButton)控件,自身携带UI样式和后台逻辑。
668 0
WPF自定义控件09:FlatWaveButton
|
Web App开发 C#
WPF自定义控件08:FlatRoundImage
在不少的应用程序中,用户中心的个人页面经常需要显示头像,这个当前主流的做法就是用户上传一个图片,系统进行截取并显示为一个圆形的轮廓,即圆形的照片。本文将介绍一下自定义的图片控件FlatRoundImage,它是一个UserControl控件,自身携带UI样式和后台逻辑。
661 0
WPF自定义控件08:FlatRoundImage
|
C# 容器
WPF自定义控件10:FlatListView
在不少的应用程序中,有时候需要使用ListView控件来显示一组集合数据,这样可以从一组数据中进行选择,让数据更加的规范,便于统计和分析。本文将介绍一下自定义的列表控件FlatListView,它与FlatCheckBox实现过程非常类似,它是继承自ListView,但使用自定义的UI样式来美化界面。
594 0
WPF自定义控件10:FlatListView
WPF自定义控件04:FlatRadioButton
本文通过在WPF中引入Font Awesome图标字体来实现自定义FlatRadioButton控件的UI绘图。用户只需要在窗体上引入自定义的FlatRadioButton控件即可使用具有Flat UI效果的控件,非常方便。
625 0
WPF自定义控件04:FlatRadioButton
WPF自定义控件06:FlatComboBox
在不少的应用程序中,经常需要使用下拉框(ComboBox)控件来从类别字段中选择,这样可以限定值的范围,让数据更加的规范,便于统计和分析。本文将介绍一下自定义的下拉框控件FlatComboBox,它与FlatCheckBox实现过程非常类似,它是继承自ComboBox,但使用自定义的UI样式来美化界面。下面将详细介绍具体的实现细节。
846 0
WPF自定义控件06:FlatComboBox