一个图片从上到下移动,在移动过程中,如果点击,那么可以拖拽图片,放开后继续向下移动...

要求:一个图片从上到下移动,在移动过程中,如果点击,那么可以拖拽图片,放开后继续向下移动。
问题:当imageview.startAnimation(animation)之后,imageview实际上并没有移动。点击imageview的初始位置时,可以监听到onclick事件。但是点击移动中的图片时,就无法监听到onclick事件了。
想法:如果可以得到animation移动过程中的每个时刻的位置,再设置imageview的位置,这样,效果就是点击移动中的图片时能监听到onclick。

 

package com.tianlv.study.temp;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;

public class temp extends Activity {
   
private Handler mHandler = new Handler();

private Runnable mMoveImage = new Runnable(){

  public void run() {
   moveImage();
  }
 
};

private ImageView iView;
private int downMouseY;
private AbsoluteLayout.LayoutParams downImagePms;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        iView = (ImageView) findViewById(R.id.ImageView01);
       
        iView.setOnTouchListener(new OnTouchListener(){
   public boolean onTouch(View view, MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN){
     Log.i("debug", "stop");
     downMouseY = (int) event.getRawY();
     downImagePms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
     mHandler.removeCallbacks(mMoveImage);
    }

    if(event.getAction() == MotionEvent.ACTION_UP){
     Log.i("debug", "move");
     mHandler.postDelayed(mMoveImage, 500);
    }
   
    if(event.getAction() == MotionEvent.ACTION_MOVE){
     dragImage((int) event.getRawY()- downMouseY);
    }
    return true;
   }
  });
    }
   
    private void moveImage(){
     AbsoluteLayout.LayoutParams oldLayPms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
     AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(oldLayPms.width, oldLayPms.height, oldLayPms.x, oldLayPms.y+1);

     iView.setLayoutParams(newLayPms);
    
     mHandler.removeCallbacks(mMoveImage);
    
     if(newLayPms.y < 300){
      mHandler.postDelayed(mMoveImage, 500);
     }
    }
   
    private void dragImage(int y){
     AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(downImagePms.width, downImagePms.height, downImagePms.x, downImagePms.y+y);

     iView.setLayoutParams(newLayPms);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值