Android自定义View----1. 自定义自绘控件
自定义View的实现方式大概可以分为三种:
(1).自绘控件 (2).组合控件 (3).继承控件
上一节讲了自定义组合控件,本节讲解自绘控件使用.
本节正文
自定义view中,自绘控件相对较难部分,自绘控件可以理解为,此组件需要我们自己来绘制完成的,绘制代码需要在onDraw方法中进行实现.
(1).先要理清自绘控件中各种图层如何嵌套的,有哪些基本图形绘制等,理清绘制思路.
(2).然后定义一个view继承自view 类,添加好类的构造方法,
(3).最后在onDraw方法中进行绘制操作.
定义一个View类
public class CustomViews extends View { private Paint paint; private Rect rect; private int count; private int radius = 100; public CustomViews(Context context, AttributeSet attrs) { super(context, attrs); paint = new Paint(Paint.ANTI_ALIAS_FLAG); rect = new Rect(); new Thread(new Runnable() { @Override public void run() { while (true) { if (count >= 10) { count = 0; } count++; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } postInvalidate(); } } }).start(); } public CustomViews(Context context) { super(context); } public CustomViews(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //画一个圆形 paint.setColor(Color.YELLOW); canvas.drawCircle(getWidth() / 2, getHeight() / 2, radius, paint); paint.setColor(Color.RED); paint.setTextSize(50); String counts = String.valueOf(count); // 处理字体的宽高 paint.getTextBounds(count + "", 0, counts.length(), rect); float textwidth = rect.width(); float textheight = rect.height(); canvas.drawText(count + "", (getWidth() - textwidth) / 2, (getHeight() + textheight) / 2, paint); } }
主要绘制过程在 onDraw 方法中,先去绘制一个圆形,然后绘制一个文本,,绘制过程中注意的细节问题,需要自己去把握了。
代码就不做更多讲解,重要的地方,在于拆分绘制图形的顺序..如何进行绘制。http://git.oschina.net/xiabing/TestDemoForview
自定义view 常见会出现问题,各种异常解决分析,请查阅:
Android异常汇集: http://blog.csdn.net/xiabing082/article/details/43487159