Android自定义View控件,基本步骤
来源:互联网 发布:男生 马丁靴 知乎 编辑:程序博客网 时间:2024/05/16 01:03
使用Android创建一个自定义控件用于实现多行滚动显示文字、以及颜色的随机改变
一、新建一个Android项目,名字为DesignView
二、新建 DynamicTextLine.java
package design.cc.com.designview.design.cc.com.designview.dynamictext;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;/** * 创建一个抽象类,进行封装,其中 drawSub和logic方法只是在父类中进行管理,需要在子类中实现 * Created by Administrator on 2/26/2017. */public abstract class DynamicTextLine extends View { private MyThread thread; public DynamicTextLine(Context context) { super(context); } public DynamicTextLine(Context context, AttributeSet attrs) { super(context, attrs); } /** * 加入控制元素,绘制元素通过canvas来绘制的,使用final来禁止子类来覆盖父类的方法 */ @Override protected final void onDraw(Canvas canvas) { drawSub(canvas); if (thread == null) { thread = new MyThread(); thread.start(); } else { drawSub(canvas); } } /** * 对绘制方法进行封装 * * @param canvas */ protected abstract void drawSub(Canvas canvas); /** * 将逻辑代码进行封装 */ protected abstract void logic() ; /** * 需要在离开屏幕的时候讲MyThread中的死循环结束掉 */ private boolean runnning=true; @Override protected void onDetachedFromWindow() { runnning=false; super.onDetachedFromWindow(); } /** * 创建一个线程 */ class MyThread extends Thread { @Override public void run() { while (true) { logic(); postInvalidate(); try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } } } }}
三、新建属性文件attrs.xml
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="DynamicTextLine"> <attr name="lineNum" format="integer"/> </declare-styleable></resources>
四、新建TextLine.java文件
package design.cc.com.designview.design.cc.com.designview.dynamictext;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import java.util.Random;import design.cc.com.designview.R;/** * Created by Administrator on 2/26/2017. */public class TextLine extends DynamicTextLine { private Paint paint = new Paint(); /** *在资源文件attrs.xml中定义linNum属性 */ private int lineNum=0; private float rx = 0; private RectF rectF = new RectF(0, 60, 100, 160); private float sweepAngel = 0;//设置区间的角度 /** * 用于产生随机值,使得文字和圆的绘制颜色随机改变 */ Random rand = new Random(); public TextLine(Context context) { super(context); } public TextLine(Context context, AttributeSet attrs) { super(context, attrs); //获取到样式属性中的一个列表,其中DynamicTextLine位于attra.xml中设置 TypedArray ta=context.obtainStyledAttributes(attrs, R.styleable.DynamicTextLine); //其中DynamicTextLine_lineNum是自动生成的 lineNum=ta.getInt(R.styleable.DynamicTextLine_lineNum,1); //解析完成后需要释放TypedArray ta.recycle(); } @Override protected void drawSub(Canvas canvas) { // Paint paint = new Paint(); /** * 让文字不停的滚动,需要不断文字的坐标 */ paint.setTextSize(30); //用于设置文字的大小 canvas.drawText("This is on draw", rx, 100, paint); /** * 绘制几何元素 */ // canvas.drawLine(0, 60, 100, 60, paint); // canvas.drawRect(); /** *动态绘制圆 */ canvas.drawArc(rectF, 0, sweepAngel, true, paint); /** * 通过xml文件设置属性的方式来控制显示的行数 * */ for (int i=0;i<lineNum;i++){ canvas.drawText("什么鬼",rx,30+30*i,paint); } } @Override protected void logic() { //view提供了在线程中重新复制的方法,postInvalidate实际上会重新调用onDraw方法 rx = rx + 10; /** * getWidth是view提供的方法,用户获取屏幕的宽度 */ if (rx > getWidth()) { rx = 0 - paint.measureText("This is on draw"); //减去文字的宽度,让文字从屏幕的边缘进入 } sweepAngel++; if (sweepAngel > 360) { sweepAngel = 0; } int r = rand.nextInt(256); //可以取到0-255全部的值 int g = rand.nextInt(256); //可以取到0-255全部的值 int b = rand.nextInt(256); //可以取到0-255全部的值 paint.setARGB(255, r, g, b); //四个参数分别代表透明度、红绿蓝 }}
五、在activity_main文件中添加控件
<design.cc.com.designview.design.cc.com.designview.dynamictext.TextLine android:layout_width="match_parent" android:layout_height="match_parent" app:lineNum="3"/>
其中lineNum代表同时滚动的文字的数目
源码地址:http://download.csdn.net/detail/lrici/9764565
0 0
- Android自定义View控件,基本步骤
- 自定义view 基本步骤
- Android自定义View的基本步骤和使用自定义属性
- Android 自定义View步骤
- Android 自定义View步骤
- Android 自定义view步骤
- Android 自定义View步骤
- 自定义View的基本步骤
- 重识下自定义view基本步骤
- Android自定义控件步骤
- Android自定义控件步骤
- Android基本View控件
- Android自定义View控件
- Android自定义View控件
- Android自定义View控件
- Android自定义View控件
- Android自定义View控件
- Android view 自定义控件
- Linux如何查看进程、杀死进程、启动进程等常用命令
- Instagram如何注册
- B. Weird Rounding
- 华为机试在线训练-牛客网(39)记票统计
- C. Dishonest Sellers
- Android自定义View控件,基本步骤
- canvas demo
- PCL Installation and Configuration on OSX
- 敏捷开发的价值观与十二条原则
- 0003_20170226_【我是菜鸟】_equals与hashCode两种方法之间的关系
- html5学习--利用localstorage在静态页面间传递参数
- 绝对答疑解惑的js指导
- 数据库连接:操作数据增删改查
- D. String Game