在Android Studio中添加延迟计时器

【在Android Studio中添加延迟计时器】须知少年凌云志,曾许人间第一流。这篇文章主要讲述在Android Studio中添加延迟计时器相关的知识,希望能为你提供帮助。
face view.java

package com.example.richelle.neeuro; public class FaceView extends View { private float radius; NormalFace normalFace; HappyFace happyFace; public FaceView(Context context, AttributeSet attrs) { super(context, attrs); // get radius value TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.FaceView, 0, 0 ); try { radius = a.getDimension(R.styleable.FaceView_radius, 20.0f); } finally { a.recycle(); }// initiate HappyFace class normalFace = new NormalFace(radius); happyFace = new HappyFace(radius); }Handler setDelay; Runnable startDelay; @Override protected void onDraw(final Canvas canvas) { super.onDraw(canvas); normalFace.draw(canvas); //delay timer setDelay = new Handler(); startDelay = new Runnable() { @Override public void run() { happyFace.draw(canvas); } }; setDelay.postDelayed(startDelay,5000); }@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int desiredWidth = (int) radius*2+(int) Math.ceil((radius/1.70)); int desiredHeight = (int) radius*2+(int)Math.ceil((radius/1.70)); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int width; int height; //Measure Width if (widthMode == MeasureSpec.EXACTLY) { //Must be this size width = widthSize; } else if (widthMode == MeasureSpec.AT_MOST) { //Can't be bigger than... width = Math.min(desiredWidth, widthSize); Log.d("Width AT_MOST", "width: "+width); } else { //Be whatever you want width = desiredWidth; Log.d("Width ELSE", "width: "+width); }//Measure Height if (heightMode == MeasureSpec.EXACTLY) { //Must be this size height = heightSize; } else if (heightMode == MeasureSpec.AT_MOST) { //Can't be bigger than... height = Math.min(desiredHeight, heightSize); } else { //Be whatever you want height = desiredHeight; }//MUST CALL THIS setMeasuredDimension(width, height); } public float getRadius() { return radius; }public void setRadius(float radius) { this.radius = radius; }}

normal face.Java
public class NormalFace {//Paint object Paint facePaint; Paint mePaint; float radius; float adjust; float mouthLeftX, mouthRightX, mouthTopY, mouthBottomY; RectF mouthRectF; Path mouthPath; float eyeLeftX, eyeRightx, eyeTopY, eyeBottomY; RectF eyeLeftRectF, eyeRightRectF; public NormalFace(float radius){ this.radius= radius; facePaint = new Paint(); facePaint.setColor(0xfffed325); // face color - yellow facePaint.setDither(true); facePaint.setStrokeJoin(Paint.Join.ROUND); facePaint.setStrokeCap(Paint.Cap.ROUND); facePaint.setPathEffect(new CornerPathEffect(10) ); facePaint.setAntiAlias(true); facePaint.setShadowLayer(4, 2, 2, 0x80000000); mePaint = new Paint(); mePaint.setColor(0xff2a2a2a); //black mePaint.setDither(true); mePaint.setStyle(Paint.Style.STROKE); mePaint.setStrokeJoin(Paint.Join.ROUND); mePaint.setStrokeCap(Paint.Cap.ROUND); mePaint.setPathEffect(new CornerPathEffect(10) ); mePaint.setAntiAlias(true); mePaint.setStrokeWidth(radius / 14.0f); adjust = radius / 3.2f; // Left Eye eyeLeftX = radius-(radius*0.43f); eyeRightx = eyeLeftX + (radius*0.3f); eyeTopY = radius-(radius*0.5f); eyeBottomY = eyeTopY + (radius*0.4f); eyeLeftRectF = new RectF(eyeLeftX+adjust,eyeTopY+adjust,eyeRightx+adjust,eyeBottomY+adjust); // Right Eye eyeLeftX = eyeRightx + (radius*0.3f); eyeRightx = eyeLeftX + (radius*0.3f); eyeRightRectF = new RectF(eyeLeftX+adjust,eyeTopY+adjust,eyeRightx+adjust,eyeBottomY+adjust); // Mouth mouthLeftX = radius-(radius/2.0f); mouthRightX = mouthLeftX+ radius; //mouthTopY = 125 - (125*0.01f); //mouthBottomY = mouthTopY + (125*0.01f); mouthTopY = radius - (radius*(-0.2f)); mouthBottomY = mouthTopY + (radius*0.01f); mouthRectF = new RectF(mouthLeftX+adjust,mouthTopY+adjust,mouthRightX+adjust,mouthBottomY+adjust); //mouthRectF = new RectF(mouthLeftX+adjust,mouthTopY+70,mouthRightX+adjust,mouthBottomY+20); //a linemouthPath = new Path(); mouthPath.arcTo(mouthRectF, 30, 120, true); //mouthPath.arcTo(mouthRectF, 15, 135, true); }public void draw(Canvas canvas) {// 1. draw face canvas.drawCircle(radius+adjust, radius+adjust, radius, facePaint); // 2. draw mouth mePaint.setStyle(Paint.Style.STROKE); canvas.drawPath(mouthPath, mePaint); //canvas.drawLine(90, 155, 176, 155, mePaint); // 3. draw eyes mePaint.setStyle(Paint.Style.FILL); canvas.drawArc(eyeLeftRectF, 0, 360, true, mePaint); canvas.drawArc(eyeRightRectF, 0, 360, true, mePaint); } }

happy face.Java
public class HappyFace {//Paint object Paint facePaint; Paint mePaint; float radius; float adjust; float mouthLeftX, mouthRightX, mouthTopY, mouthBottomY; RectF mouthRectF; Path mouthPath; float eyeLeftX, eyeRightx, eyeTopY, eyeBottomY; RectF eyeLeftRectF, eyeRightRectF; public HappyFace(float radius){ this.radius= radius; facePaint = new Paint(); facePaint.setColor(0xfffed325); // face color - yellow facePaint.setDither(true); facePaint.setStrokeJoin(Paint.Join.ROUND); facePaint.setStrokeCap(Paint.Cap.ROUND); facePaint.setPathEffect(new CornerPathEffect(10) ); facePaint.setAntiAlias(true); facePaint.setShadowLayer(4, 2, 2, 0x80000000); mePaint = new Paint(); mePaint.setColor(0xff2a2a2a); //black mePaint.setDither(true); mePaint.setStyle(Paint.Style.STROKE); mePaint.setStrokeJoin(Paint.Join.ROUND); mePaint.setStrokeCap(Paint.Cap.ROUND); mePaint.setPathEffect(new CornerPathEffect(10) ); mePaint.setAntiAlias(true); mePaint.setStrokeWidth(radius / 14.0f); adjust = radius / 3.2f; // Left Eye eyeLeftX = radius-(radius*0.43f); eyeRightx = eyeLeftX + (radius*0.3f); eyeTopY = radius-(radius*0.5f); eyeBottomY = eyeTopY + (radius*0.4f); eyeLeftRectF = new RectF(eyeLeftX+adjust,eyeTopY+adjust,eyeRightx+adjust,eyeBottomY+adjust); // Right Eye eyeLeftX = eyeRightx + (radius*0.3f); eyeRightx = eyeLeftX + (radius*0.3f); eyeRightRectF = new RectF(eyeLeftX+adjust,eyeTopY+adjust,eyeRightx+adjust,eyeBottomY+adjust); // Smiley Mouth mouthLeftX = radius-(radius/2.0f); mouthRightX = mouthLeftX+ radius; mouthTopY = radius - (radius*0.2f); mouthBottomY = mouthTopY + (radius*0.5f); mouthRectF = new RectF(mouthLeftX+adjust,mouthTopY+adjust,mouthRightX+adjust,mouthBottomY+adjust); mouthPath = new Path(); mouthPath.arcTo(mouthRectF, 30, 120, true); }public void draw(Canvas canvas) {// 1. draw face canvas.drawCircle(radius+adjust, radius+adjust, radius, facePaint); // 2. draw mouth mePaint.setStyle(Paint.Style.STROKE); canvas.drawPath(mouthPath, mePaint); // 3. draw eyes mePaint.setStyle(Paint.Style.FILL); canvas.drawArc(eyeLeftRectF, 0, 360, true, mePaint); canvas.drawArc(eyeRightRectF, 0, 360, true, mePaint); } }

FaceView.java用于在画布中显示不同的面部表情。 NormalFace.java和HappyFace.java是不同面部表情的UI。我想在FaceView.java中添加一个延迟计时器,以便在计时器完成倒计时后,正常面部的显示可以变为幸福的面部。
答案使用此:ms是以毫秒为单位的延迟
try { Thread.sleep(ms); } catch (InterruptedException e) { e.printStackTrace(); }

另一答案您可以在Handler中使用android.Handler类有一个方法postDelayed(),您可以使用此方法进行延迟,从here读取有关处理程序的内容
Runnable happy = new Runnable() { public void run() { happyFace(); //suppose this is the method for happy face } };

然后在5秒后调用此方法
handler.postDelayed(happy,5000);

它将发布您的代码,以便在5秒后运行
另一答案您可以使用Handler来延迟下一个任务
import android.os.Handler; Handler handler=new Handler(); Runnable r=new Runnable() { public void run() { // Your next task } }; handler.postDelayed(r, 30000);

30000是延迟的值,以毫秒为单位,使其为30秒

    推荐阅读