单击相同图像开始图像动画

时间:2014-01-28 07:26:32

标签: android android-animation

我有图像动画(从下到上,从上到下移动),当我安装到设备时它会自动加载但是我不会那样,我的要求是我要点击那个图像然后只有动画有开始,         请帮帮我

ondraw方法是:

protected void onDraw(Canvas c){

    int z= c.getHeight()/2;
    Log.e("bharat","z is"+z);
    BitmapDrawable ball = (BitmapDrawable) mContext.getResources().getDrawable(R.drawable.ball);  
    if (x<0 && y <0) {
        //x = this.getWidth()/2;
        y = c.getHeight()/2;


    } else {
        //x += xVelocity;
        y += yVelocity;
        if ((x > this.getWidth() - ball.getBitmap().getWidth()) || (x < 0)) {
            xVelocity = xVelocity*-1;
        }
        if (((y > this.getHeight() - ball.getBitmap().getHeight()) || (y < 0))) {
            yVelocity = yVelocity*-1;
        }
    }
    c.drawBitmap(ball.getBitmap(), x, y, null);  

    if(touching){ 
        h.postDelayed(r, FRAME_RATE); 
        bm_w=ball.getBitmap().getWidth();
        bm_h=ball.getBitmap().getHeight();
    }




activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

<com.example.example.AnimatedView
        android:id="@+id/anim_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:onClick="imageClicked" />

</RelativeLayout>
**animatedview.java**

     //this is for image moving from bottom to top

     public class AnimatedView extends ImageView{

    static int count=0;
    private Context mContext;
    int x = 150;
    int y = 450;
    private float a,b;
    private int xVelocity = 10;
    private int yVelocity = 15;
    private Handler h;
    private final int FRAME_RATE = 25;
    BitmapDrawable ball;
    boolean touching;
    boolean dm_touched = false;

    int bm_x = 0, bm_y = 0, bm_offsetx, bm_offsety,bm_w,bm_h;

    public AnimatedView(Context context, AttributeSet attrs)  {  
        super(context, attrs);  
        mContext = context;  
        h = new Handler();
    } 

    private Runnable r = new Runnable() {
        @Override
        public void run() {
            invalidate(); 
        }
    };

    @Override
    protected void onDraw(Canvas c) {  

        BitmapDrawable ball = (BitmapDrawable) mContext.getResources().getDrawable(R.drawable.ball);  
        if (x<0 && y <0) {
            //x = this.getWidth()/2;
            y = c.getHeight()/2;


        } else {
            //x += xVelocity;
            y += yVelocity;
            if ((x > this.getWidth() - ball.getBitmap().getWidth()) || (x < 0)) {
                xVelocity = xVelocity*-1;
            }
            if ((y > this.getHeight() - ball.getBitmap().getHeight()) || (y < 0)) {
                yVelocity = yVelocity*-1;
            }
        }
        c.drawBitmap(ball.getBitmap(), x, y, null);  

        h.postDelayed(r, FRAME_RATE);    
        bm_w=ball.getBitmap().getWidth();
        bm_h=ball.getBitmap().getHeight();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
         Log.d("bharat","ontouch called");
        int touchType = event.getAction();

         switch(touchType){


            case MotionEvent.ACTION_MOVE: 
                a = event.getX();
                b = event.getY();
                touching = true;
                if (dm_touched) {
                    x = (int) a - bm_offsetx;
                    y = (int) b - bm_offsety;
                }
                break;

             case MotionEvent.ACTION_DOWN: 
                 //x and y give you your touch coordinates
                  a = event.getX();
                  b = event.getY();
                  touching = true;
                  Log.d("bharat","action_down called");
                  if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) {

                        count++;
                       Log.i("bharat",""+count);
                       Intent intent1 = new Intent();
                       intent1.putExtra("score", count);

                    }

                    dm_touched = true;
             case MotionEvent.ACTION_UP:
                default:

                    dm_touched = false;
                    touching = false;


                }

                return true;
    }
    }

**MainActivity.java**

         //here i am want to get the image the view and by clicking on that image only animation should  loaded 

        public class MainActivity extends Activity {


            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main); 
                View  animatedView =  findViewById(R.id.anim_view);
                      ImageView imageView=(ImageView) findViewById(R.id.imageView1);
            }

1 个答案:

答案 0 :(得分:0)

您未在动画视图中附加任何点击侦听器。将构造函数修改为

public AnimatedView(Context context, AttributeSet attrs)  {  
    super(context, attrs);  
    mContext = context;  
    h = new Handler();
    setOnTouchListener(this)
} 

同时在invalidate()

中致电onTouchEvent()
public boolean onTouchEvent(MotionEvent event) {
    int touchType = event.getAction();

     switch(touchType){


        case MotionEvent.ACTION_MOVE: 
            a = event.getX();
            b = event.getY();
            touching = true;
            invalidate();
            break;
    }
 }