Android 如何在程序中使用线程?

Android 如何在程序中使用线程?,android,multithreading,shapedrawable,Android,Multithreading,Shapedrawable,我想用我尝试过的线程在屏幕上移动图像,但由于线程的代码不正确,它不能正常工作。我能够得到图像,我想在屏幕上移动图像 在这段代码中,我想移动卵形图像,我不想它一定会影响jerry图像,但问题是线程也在它上面实现 margenMaxX和margenxy是最大宽度和高度 public class AnimatedView extends ImageView { public AnimatedView(Context context) {

我想用我尝试过的线程在屏幕上移动图像,但由于线程的代码不正确,它不能正常工作。我能够得到图像,我想在屏幕上移动图像 在这段代码中,我想移动卵形图像,我不想它一定会影响jerry图像,但问题是线程也在它上面实现 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();

            }
public类AnimatedView扩展了ImageView{
公共动画视图(上下文){
超级(上下文);
Resources res=context.getResources();
可提取=res.getDrawable(R.drawable.jerry);
mDrawable=新的ShapeDrawable(新的椭圆形());
mDrawable.getPaint().setColor(0xffffAC23);
} 
受保护的空白onDraw(最终画布cc){
final-Context=null;
可拉伸立根(x,y,x+宽度,y+高度);
可抽取。抽取(cc);
使无效();
线程线程=新线程()
{
@凌驾
公开募捐{
试一试{

虽然(i你必须在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();

}}
protectedvoid onDraw(最终画布抄送){
线程线程=新线程()
{
@凌驾
公开募捐{
试一试{

while(iIs)你想画一个新线程有什么特别的原因吗?UI处理必须在一个UI线程(主线程)上完成。我正在开发一个游戏,所以我希望这项工作能够被单独执行,这要感谢它在行上下文中给出了错误。rununuithread(new Runnable()protected void onDraw(final Canvas cc){final Context Context=null;Thread Thread=new Thread(){@Override public void run(){try{while(它说的是将强制转换添加到上下文中,而不是我做的这个((活动)上下文).runOnUiThread(new Runnable(),但它在这里显示异常…..03-24 13:16:27.070:E/AndroidRuntime(10277):位于com.game2.MainActivity$AnimatedView$1.run(MainActivity.java:218)@Abhi MainActivity.java中第219行有什么内容?感谢您的帮助球在屏幕上移动,但它也使另一个图像进入睡眠状态,我希望球移动缓慢我增加了时间,但它不工作