OnClickListener в TranslateAnimation - PullRequest
       21

OnClickListener в TranslateAnimation

4 голосов
/ 21 января 2012

Я делаю проект с использованием TranslateAnimation в Android. В этом я успешно переводю изображения, но я должен добавить onClickListener к изображениям. Это означает, что я щелкаю изображения во время перевода и получаю их значения, но я получаю действие onClick для изображений.

Я использую следующий код:

public class SampleGame extends Activity implements OnClickListener {

    int x10, x20, y10, y20;

    ImageView img;

    Button animation;
    Handler transHandler;
    RelativeLayout layout;
    Random rand;
    int mSpeedX, mSpeedY;
    int width, height;
    Thread thread;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        layout = (RelativeLayout) findViewById(R.id.layout);
        animation = (Button) findViewById(R.id.animation);

        animation.setOnClickListener(this);

        rand = new Random();

        width = getWindow().getWindowManager().getDefaultDisplay().getWidth() - 20;
        height = getWindow().getWindowManager().getDefaultDisplay().getHeight() - 70;

        x10 = width - rand.nextInt(width);
        y10 = height;

        x20 = width;
        y20 = height - rand.nextInt(height);

        thread = new Thread();

        img.setOnClickListener(this);

    }

    public void onPause() {
        super.onPause();
        thread = null;
    }

    @Override
    public void onClick(View v) {

        if (v.equals(img)) {
            Log.e("img clicked  :", "yaaaaaaaaa");
        }

        if (v.equals(animation)) {
            animation.setVisibility(View.INVISIBLE);
            callTransform();
        }
    }

    public void callTransform() {
        if (thread != null) {
            thread = new Thread() {
                public void run() {

//  Log.e("X1 value     :",String.valueOf(x10));    
//  Log.e("X2 value     :",String.valueOf(x20));    
//  Log.e("Y1 value     :",String.valueOf(y10));    
//  Log.e("Y2 value     :",String.valueOf(y20));    

                    transformAnimation(x10, x20, y10, y20, img, 4000);

                    try {
                        Thread.sleep(4000);
                    } catch (Exception e) {
                    }
//  Message msg=transHandler.obtainMessage();
//  transHandler.sendMessage(msg);
                    x10 = x20;
                    y10 = y20;

                    if (x10 == width) {
                        x20 = width - rand.nextInt(width);
                        y20 = 0;
                    } else if (y10 == 0) {
                        x20 = 0;
                        y20 = height - rand.nextInt(height);
                    } else if (x10 == 0) {
                        x20 = width - rand.nextInt(width);
                        y20 = height;
                    } else if (y10 == height) {
                        x20 = width;
                        y20 = height - rand.nextInt(height);
                    }

                    callTransform();
                }
            };
            thread.start();
        }
    }


    public void transformAnimation(int xFrom, int xTo, int yFrom, int yTo, final ImageView image, int time) {
        TranslateAnimation anim = new TranslateAnimation(xFrom, xTo, yFrom, yTo);
        anim.setDuration(time);
        image.setAnimation(anim);
    }

}

и я попробовал также следующий пример - Пример 2D-обучения .

Но в этом случае я также не нажимал на действие с изображениями.

Так как получить действие onClick для изображения во время перевода?

или

Есть ли другой способ перевести изображение с помощью действия при нажатии?

Заранее спасибо.

1 Ответ

0 голосов
/ 13 февраля 2012

во время анимации объект остается в исходном положении, но он анимирует перевод, поэтому вам нужно будет обновить параметры макета вручную во время анимации

...