Search code examples
androidonclicktranslate-animation

OnClickListener in TranslateAnimation


I am doing a project using TranslateAnimation in Android. In that I am translating images successfully but I have to add onClickListener to the images. That means I have click the images during translating and get their values but I am getting the onClick action on the images.

I am using following code:

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

}

and I tried the following example also - 2D-Tutorial Example.

But in this also I didn't onClick action for images.

So how to get the onClick action on image during translation?

or

Is there any other way to translate the image with on click action?

Thanks in Advance.


Solution

  • during animation the object remains in its original position but it animates translation so you would need to update the Layout Parameters manually during animation