我想使用我尝试过的线程在屏幕上移动图像但由于线程代码不正确而无法正常工作。我能够获得图像,我想在屏幕上移动图像 在这个代码中,我想移动椭圆形图像,我不希望它必须影响杰里图像,但问题是线程也在实现它 margenMaxX,margenxy是最大宽度和高度
public class AnimatedView extends ImageView {
public AnimatedView(Context context) {
super(context);
Resources res = context.getResources();
drawable = res.getDrawable(R.drawable.jerry);
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xffffAC23);
}
protected void onDraw(final Canvas cc) {
final Context context = null;
drawable.setBounds(x , y , x + width, y + height);
drawable.draw(cc);
invalidate();
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(i<=margenMaxX && j<=margenmaxy) {
sleep(100);
// context.runOnUiThread(new Runnable() {
//handler.post(r);
runOnUiThread(new Runnable() {
@Override
public void run() {
mDrawable.setBounds(i, j ,i+ width, i+ height);
mDrawable.draw(cc);
}
});
//invalidate();
i=i+10;
j=j+10;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}
答案 0 :(得分:0)
您必须在UI线程内更新UI。试试这个,它没有经过测试,但它应该可以工作
protected void onDraw(final Canvas cc) {
Thread thread = new Thread()
{
@Override
public void run() {
try {
while(i<=margenMaxX && j<=margenmaxy) {
sleep(100);
//handler.post(r);
context.runOnUiThread(new Runnable() {
@Override
public void run() {
mDrawable.setBounds(i, j ,i+ width, i+ height);
mDrawable.draw(cc);
}
});
//invalidate();
i=i+10;
j=j+10;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
}}
有关详细信息,请参阅this