android群英传之自定义View--对现有控件进行扩展(1)

很多时候系统自带的控件无法满足我们设计的要求,这个时候android提供的允许自定义view的办法就帮了我们大忙。在android中,自定义view主要有三种实现方式

1.对现有控件进行扩展

2.通过组合实现新的控件

3.重写view来实现新的控件

现在先是第一点,对现有控件进行扩展


书中给了两个例子,第一个是对textview控件进行扩展,代码片段如下:

protected void onDraw(Canvas canvas) {
		//绘制外层矩形
		canvas.drawRect(0,
						0,
						getMeasuredWidth(),
						getMeasuredHeight(),  
						mPaint1);
		//绘制内层矩形
		canvas.drawRect(10, 
						10, 
						getMeasuredWidth()-10,
						getMeasuredHeight()-10, 
						mPaint2);
		canvas.save();
		//绘制文字前平移10像素
		canvas.translate(10, 0);
		//在回调父方法之前实现自己的逻辑,对Textview来说即是在绘制文本之前
		super.onDraw(canvas);
		//在回调父方法之后实现自己的逻辑,对Textview来说即是在绘制文本之后
		canvas.restore();
	}


 
在这之前,我们需要在构造方法中增加对画笔属性的初始化,因为我们要在布局文件中使用到这个自定义的view,所以要添加两个参数的构造方法,这里的第二个参数AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来(如果有的话),而拥有一个参数的构造函数只适合于直接在activity用代码调用该view时使用。 

<span style="font-size:18px;">
public RecTextView(Context context,AttributeSet attributeSet) {
		super(context,attributeSet);
		// TODO Auto-generated constructor stub.
		mPaint1 = new Paint();
		mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
		mPaint1.setStyle(Paint.Style.FILL);
		
		mPaint2 = new Paint();
		mPaint2.setColor(Color.YELLOW);
		mPaint2.setStyle(Paint.Style.FILL);
	}</span>

然后在xml文件中添加该控件

<span style="font-size:18px;"> <
com.example.textviewbyextend.RecTextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android hello"/></span>
完成之后,就可以在代码中实例化这个布局文件了
<span style="font-size:18px;">
public class MainActivity extends Activity {
	
	private RecTextView recTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    }

   
}</span>
效果如图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值