加入逻辑线程
2016-04-12 22:51
651 查看
通过线程实现以下效果:
新建LogicView.java,代码如下:
此时运行时是MainActivity.java,所以需要在content_main.xml中注册LogicView:
此时运行就能得到目标效果了。
注:
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval :指定圆弧的外轮廓矩形区域。
startAngle: 圆弧起始角度,单位为度。
sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度,从右中间开始为零度。
useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。
paint: 绘制圆弧的画板属性,如颜色,是否填充等。
1) start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。
取得字符串的宽度值。
postInvalidate()实际上是重新调用onDraw方法。
线程休眠30ms。
如何自动出现异常捕捉?
alt+/
新建LogicView.java,代码如下:
package com.hui.myview.v2; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; import java.util.Random; /** * Created by Administrator on 2016/4/12. */ public class LogicView extends View{ private Paint paint=new Paint(); private float rx=0; private MyThread thread; private RectF rectF=new RectF(0,60,100,160); private float sweepAngle=0; public LogicView(Context context,AttributeSet attrs){ super(context,attrs); } public LogicView(Context context){ super(context); } protected void onDraw(Canvas canvas){ paint.setTextSize(30); canvas.drawText("LogicView", rx, 30, paint); canvas.drawArc(rectF,0,sweepAngle,true,paint);//绘制圆 if(thread==null){ thread=new MyThread(); thread.start();//调用start方法会自动调用run方法 } // rx=rx+100; // canvas.drawText("LogicView",rx,30,paint); } class MyThread extends Thread{ Random rand=new Random(); public void run(){ while(true){ rx += 3; if(rx>getWidth()){ rx=0-paint.measureText("LogicView"); } sweepAngle++; if(sweepAngle>360){ sweepAngle=0; } int r= rand.nextInt(256); int g= rand.nextInt(256); int b= rand.nextInt(256); paint.setARGB(255,r,g,b); postInvalidate();//实际上是重新调用onDraw方法 try { Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
此时运行时是MainActivity.java,所以需要在content_main.xml中注册LogicView:
<com.hui.myview.v2.LogicView android:layout_width="match_parent" android:layout_height="match_parent" />
此时运行就能得到目标效果了。
注:
canvas.drawArc(rectF,0,sweepAngle,true,paint);
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval :指定圆弧的外轮廓矩形区域。
startAngle: 圆弧起始角度,单位为度。
sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度,从右中间开始为零度。
useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。
paint: 绘制圆弧的画板属性,如颜色,是否填充等。
thread.start();
1) start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。
paint.measureText("LogicView");
取得字符串的宽度值。
postInvalidate()实际上是重新调用onDraw方法。
Thread.sleep(30);
线程休眠30ms。
如何自动出现异常捕捉?
alt+/
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories