自定义控件

创建新的视图控件:
1、如果现有控件满足基本功能,只需要对现有控件的外观或者行为进行修改或者扩展,通过重写事件处理程序和onDraw方法,但是仍然回调超类方法,对视图进行定制,不需要重新实现它的功能。
2、通过组合多个视图创建不可分割的、可重用的小组件,从而使他可以综合使用多个相互的视图的功能。
3、当需要一个全新的界面,通过修改和组合现有控件不能实现这个目标,就需要创建一个全新的控件。
eg:
package com.conghua.view;
import com.conghua.activity.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.TextView;
public class MyTextView extends TextView {
private Paint marginPaint ;
private Paint linePaint ;
private int paperColor ;
private float margin ;
public MyTextView(Context context) {
super(context);
init() ;
}
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init() ;
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init() ;
}
@Override
protected void onDraw(Canvas canvas) {
//绘制页面颜色
canvas.drawColor(paperColor) ;
//绘制规划的直线
canvas.drawLine(0, 0, getMeasuredHeight(), 0, linePaint) ;
canvas.drawLine(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(), linePaint) ;
//绘制边缘
canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint) ;
//移动文本,让它跨过边缘
canvas.save() ;
canvas.translate(margin, 0) ;
//使用TextView渲染文本
super.onDraw(canvas);
canvas.restore() ;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
private void init() {
//创建对资源表的引用
Resources myResources = getResources() ;
//创建onDraw方法中使用的画刷
marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG) ;
marginPaint.setColor(myResources.getColor(R.color.maigin)) ;
linePaint = new Paint(Paint.ANTI_ALIAS_FLAG) ;
linePaint.setColor(myResources.getColor(R.color.lines)) ;
//获取背景颜色和边缘宽度
paperColor = myResources.getColor(R.color.paper) ;
margin = myResources.getColor(R.color.maigin) ;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值