今天通过书籍重新复习了一遍自定义VIew,为了加强自己的学习,我把它写在博客里面,有兴趣的可以看一下,相互学习共同进步:
通过自定义一个跑马灯效果,来诠释一下简单的效果:
一、创建一个类继承View,重写onDraw方法,进行绘制文字:
(1) 定义全局的变量:
private float textX = 0;
private Paint paint = new Paint();
private MyThead thead = null;
初始化字体的位置,在onDraw方法中开启线程:
paint.setTextSize();//初始化文字大小
canvas.drawText("我是文字", textX, , paint);画出文字的开始位置;
//圆形进度调效果 起始角度,和区间角度
canvas.drawArc(rectF, , acrX, true, paint);
if (thead == null) {
thead = new MyThead();
thead.start();
}
(2)开启线程进行文字字体的移动:
private boolean running = true; private class MyThead extends Thread {
private Random random = new Random(); @Override
public void run() {
super.run(); while (running) { //文字跑马灯效果啊
textX = textX + ;
if (textX > getWidth()) {
textX = - paint.measureText("我是文字");//截取文字的长度
}
paint.setARGB(, random.nextInt(), random.nextInt(), random.nextInt());// 设置颜色 第一个参数:透明度
postInvalidate();//重新进行绘制 try {
sleep();
} catch (InterruptedException e) {
e.printStackTrace();
} } }
}
注:离开屏幕时调用的方法:
@Override
protected void onDetachedFromWindow() {
//离开屏幕的操作
running = false;
super.onDetachedFromWindow(); }
(3)、在布局或者代码中引用:
直接包名引用:
<com.example.zhangyanan.myview.view.DrawView
android:layout_width="match_parent"
android:layout_height="match_parent" />
二、在Xml中自定义属性:
列举跑马灯效果多行显示:设置全局变量行数,在xml中可以进行设置行数:
(1)初始化行数:
逻辑如下:
private int lineNum = 0;
for (int i = ; i < lineNum; i++) {
//文字跑马灯效果
paint.setTextSize();
canvas.drawText("我是文字", textX, + i * , paint); if (thead == null) {
thead = new MyThead();
thead.start();
}
}
(2)在values中创建attrs.xml文件定义样式属性:
<resources>
<declare-styleable name="DrawaViewStyle">
<attr name="lineNum" format="integer"></attr>
</declare-styleable>
</resources>
(3)在代码中解析lineNum属性:
public DrawViewAttrs(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DrawaViewStyle);
lineNum= ta.getInteger(R.styleable.DrawaViewStyle_lineNum, );
}
(4)在布局中应用:
引入命名空间:
xmlns:nt="http://schemas.android.com/apk/res/com.example.zhangyanan.myview"
添加自定义属性:
<com.example.zhangyanan.myview.view.DrawViewAttrs
android:layout_width="match_parent"
nt:lineNum=""
android:layout_height="match_parent" />
源码地址:链接:http://pan.baidu.com/s/1clQwkI 密码:6unf
以上就是自定义View的简单应用,不足之处请多指教。联系方式qq:1154749219