1

試したスレッドを使用して画面上で画像を移動したいのですが、スレッドのコードが不適切なためうまく機能しません。画像を取得でき、画面上で画像を移動したいこのコードでは、楕円形の画像を移動したいのですが、ジェリー画像に影響を与える必要はありませんが、問題はスレッドがその上に実装されていることです。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();

            }
4

1 に答える 1

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();

}}

詳細はこちらをご覧ください

于 2014-03-24T07:37:15.723 に答える