0
我正在尋找一種簡單的方法來在Android中爲自定義視圖設置動畫效果。我試圖避免使用animator對象,但想要使用原始線程。我所做的是創建一個自定義視圖,創建一個類延伸 android.view.View。然後我重寫onDraw方法並使用畫布繪製矩形。我想要的是縮小矩形,所以我保留一個變量來表示矩形右側的x值。然後我會喜歡隨着時間的推移,矩形的右邊縮小。我想要做的就是創建一個新線程,啓動它並讓它改變矩形的值。除視圖之外的所有作品在您致電View.invalidate之前不會更新。問題是我不能從我產生的線程調用它,因爲它不是UI線程。我閱讀使用處理程序的解決方案...但我仍然不確定這是否是正確的解決方案,然後如何使用它們。Android自定義視圖和處理程序
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;
}
}
這就是我一直在尋找!謝謝! – Matthew