我怎么可以在我的程序中使用该线程?

时间:2014-03-24 07:25:07

标签: android multithreading shapedrawable

我想使用我尝试过的线程在屏幕上移动图像但由于线程代码不正确而无法正常工作。我能够获得图像,我想在屏幕上移动图像 在这个代码中,我想移动椭圆形图像,我不希望它必须影响杰里图像,但问题是线程也在实现它 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();

            }

1 个答案:

答案 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