0

私が持っているもの: 私は印刷しているCustomViewクラスを持っていBitmap image;ますpoint position;

@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    canvas.drawBitmap(carSpriteImage, carspritePosition.x , carspritePosition.y, null);
}//end of OnDraw

スレッド経由で位置を更新したい

public class AnimationHelperThread extends Thread{

CustomeView customeView;

public AnimationHelperThread(CustomeView customeView){
    // TODO Auto-generated constructor stub
    this.customeView=customeView;
}
@Override
public void run() {
    super.run();

    int x=0;
    int y=0;
    for(int i=0;i<1000;i++)
    {
        try {
            Thread.sleep(400);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Point p=new Point();
        p.set(x,y);
        customeView.setCarspritePosition(p);
        x+=1;
        y+=2;
        Log.i("Helper Thread", "Call "+i);
    }
}

この方法は機能していません 何か提案してください

4

1 に答える 1

0

からのみレイアウトを変更できますUIThread。このようなものを試してみてください.-

Contextカスタム スレッドに変数を追加します。

Context context;

public AnimationHelperThread(Context context, CustomeView customeView) {
    // TODO Please, remove nasty autogenerated TODO comments
    this.context = context;
    this.customeView = customeView;
}

次に、からスレッドをインスタンス化していると仮定するとActivity、そうします.-

AnimationHelperThread thread = new AnimationHelperThread(this, customView);

そして最後に、コールrunOnUiThreadスルーcontext.-

context.runOnUiThread(new Runnable() {
    public void run() {
        Point p=new Point();
        p.set(x,y);
        customeView.setCarspritePosition(p);
    }
});

xyをインスタンス変数として定義する必要があることに注意してください。

于 2013-10-13T13:10:43.197 に答える