Как я могу получить плавный ход, используя таймер? - PullRequest
0 голосов
/ 15 ноября 2011

Я использовал следующий код для перемещения изображения, оно работает нормально, но при перемещении изображения не выполняется плавное перемещение. Может кто-нибудь найти проблему в моем коде?

 handler = new Handler(); 
    t = new Timer(); 
    t.scheduleAtFixedRate(new TimerTask() { 
            public void run() { 
                    handler.post(new Runnable() { 
                            public void run() { 

                                if(left<=400){

                                 left=left+1;

                                     RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(
                                                new ViewGroup.MarginLayoutParams(
                                                        RelativeLayout.LayoutParams.WRAP_CONTENT,
                                                        RelativeLayout.LayoutParams.WRAP_CONTENT));
                                                 rp.setMargins(left, top, 0, 0);
                                                 Train.setLayoutParams(rp);

                                }else{
                                    Toast.makeText(getApplicationContext(), "Toast completed", Toast.LENGTH_SHORT).show();
                                t.cancel();
                                }

                            } 
                    }); 

            } 

    }, 0,30); 

Ответы [ 2 ]

4 голосов
/ 15 ноября 2011

TimerTask и Threads не подходят для согласованных изменений пользовательского интерфейса.

  1. Создание CustomView путем добавления SurfaceView.

  2. Управление некоторыми переменными класса дляпозиция представлений.

  3. В onDraw () создайте представление и обновите переменные для следующего позиционирования.

  4. Везде, где требуется обновить вручную, вызовите invalidate.

Следуйте этому руководству для получения дополнительной помощи.

0 голосов
/ 07 марта 2014
ImageView img_animation = (ImageView) findViewById(R.id.imageView1);

    TranslateAnimation animation = new TranslateAnimation(0.0f, 400.0f,0.0f, 0.0f);          //  new TranslateAnimation(xFrom,xTo, yFrom,yTo)
    animation.setDuration(5000);  // animation duration 
    animation.setRepeatCount(5);  // animation repeat count
    animation.setRepeatMode(2);   // repeat animation (left to right, right to left )
    //animation.setFillAfter(true);      

    img_animation.startAnimation(animation); 

Анимация - лучшее плавное движение! Попробуйте !!

...