Android的自定义视图与处理程序(Android Custom View with Handle

2019-10-30 05:31发布

我正在寻找一种简单的方法在Android的动画自定义视图。 我试图避免使用动画对象,但要与原纱工作。 我已经通过创建一个扩展 android.view.View一个类来完成创建一个自定义视图。 然后我重写的onDraw方法,并使用画布绘制一个矩形。 我想是缩小矩形,所以我一直表示矩形的右侧的x值的变量。 然后我会像矩形的右边缘收缩在一段时间。 我也喜欢做的就是创建一个新的线程,启动它,并把它改变矩形的价值。 ,除了该视图的所有作品没有得到更新,直到你打电话View.invalidate。 问题是,因为它不是UI线程我不能调用从我催生了线程。 我使用的处理程序阅读解决方案......但我仍然不能确定,如果这是正确的解决方案,然后如何使用它们。

package com.example.practicum;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;

public class TimerControl extends View implements Runnable, Handler.Callback
{
    private Paint paint;
    private Rect rect;
    private Thread t;
    private Handler h;

    public TimerControl(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        // TODO Auto-generated constructor stub



        paint = new Paint();
        paint.setColor(Color.BLUE);
        rect = new Rect(0,0,60,60);
        t = new Thread(this);
        t.start();


        h = new Handler(this);
        //h.post(this);
    }

    @Override
    public void onDraw(Canvas canvas)
    {
        canvas.drawRect(rect, paint);
    }

    @Override
    public void run()
    {
        rect.right = rect.right-1;
        while(true)
        {
            rect.right = rect.right-1;
            this.invalidate();
            try
            {
                Thread.sleep(5000);
                h.sendEmptyMessage(0);
            } 
            catch (InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    @Override
    public boolean handleMessage(Message msg)
    {

        return false;
    }

}

Answer 1:

你可以定义一个全局处理程序(在UI线程):

Handler mHandler = new Handler();

然后,从你的线程,请致电:

mHandler.post(new Runnable() {
    public void run() {             
        // call some method on the UI thread
    }
});


文章来源: Android Custom View with Handler