Q:

android button animation with click

I'm trying to make flying balloons (up and down, infinitely) and by clicking on one of them, it will changes its direction. I tried to use Animation, but it don't support click on a view at a current position at a current time. I know, that there are two methods, for at least:

use an OpenGL
and use a Canvas.

I don't want to use OpenGL for so quit simple animation. And I don't understand how to do it, using Canvas(were read this, google docs and some google search links).
I don't need a code, all I need it's the way how to do it and the algorithm.

A:

Alright, this is what I've set up for one of my projects that would work exactly as you need...
You need to create 4 main aspects:
 - An Activity (extend Activity)
 - A SurfaceView (extend SurfaceView implement SurfaceHolder.Callback)
 - A Thread (Extend Thread)
 - Objects that interact (extend Drawable)
The Activity starts and generates a SurfaceView that creates a Thread. The View or the Thread can contain the objects that you draw/interact with, its up to you how you want to store the data at this point but its easiest if you come up with a design that has the least coupling between classes.
Once started, the Thread runs constantly until stopped (setting isRunning to false):  
/**
* Processing loop
*/
public void run() {   
    while (isRunning) {
        try {
                sleep(25);
            } catch (InterruptedException e) {
                Log.e("Thread","Thread Interruption");
                e.printStackTrace();
            }
        update();
    }
    Log.d("Thread", "Game Loop Stopped");
}

/**
 * Main processing of the game loop.
 */
private void update() {
    handleInput();
    updatePhysics();
    updateUI();
    updateState();
    updateAI();
    updateAnimations();
    updateSound();
    updateVideo();
}

In this class you see the update() method that does a bunch of actions each iteration of the thread.
The methods that will interest you mostly are the handleInput, updateUI and updatePhysics methods.
In the handleInput you'll do a callback to the SurfaceView to get the data that you need for processing information. My handleInput is fairly simple in that it just grabs the MotionEvent from the SurfaceView class's onTouchEvent (this gets implemented when you use the SurfaceHolder.OnCallBack interface). 
The updateUI method calls the SurfaceView's update where it re-draws the Canvas with each object, or balloon
public void update(List<Actor> actors) {
        Canvas canvas = null;       
        try {
            canvas = surface.lockCanvas();
            synchronized (surface) {
                //Blank the Canvas

                for (int i = 0; i < actors.size(); i++) {   
                    actors.get(i).draw(canvas);
                }
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        } finally {
            if (canvas != null) {
                surface.unlockCanvasAndPost(canvas);
            }
        }   
    }

Here we can see that it calls the draw method passing the canvas object to each one of your interactable objects. I've called mine "Actors" in the code above. How you choose to implement draw is up to you but it sounds like you'll be using a lot of canvas.drawBitmap() functions.
Going back to the Thread's updatePhysics method you'll want to use it to update the objects before or after they're drawn to the screen. For you you'll want to have them change their X and/or Y positions on the screen or change the direction its moving after the handleInput decides you've hit a balloon.

Its very hard to explain this well in a StackOverflow reply. If you really want I can try to put something more informative together this weekend and post it externally for you (I can provide my UML class diagrams among other information such as picture examples, structures and data flows.
Please let me know if I can help you further! Please note that this isn't all my work. I used a lot of tutorials online for basic Android Game structure but don't have the links available right now to provide references.

