一个图片从上到下移动,在移动过程中,如果点击,那么可以拖拽图片,放开后继续向下移动
要求:一个图片从上到下移动,在移动过程中,如果点击,那么可以拖拽图片,放开后继续向下移动。
问题:当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);
??? }
}