这里演示控件拖动的动画:
原理就是响应控件的Touch事件,在Touch事件中对移动进行处理,注意,一定要在布局文件中设置控件的
android:clickable="true"。
代码如下:
package com.zhycheng.draftdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class DraftDemoActivity extends Activity implements OnTouchListener {
ImageView iv;
int screenWidth,screenHeight;
int lastX,lastY;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iv=(ImageView) findViewById(R.id.imageView1);
iv.setOnTouchListener(this);
Display dis=this.getWindowManager().getDefaultDisplay();
screenWidth=dis.getWidth();
screenHeight=dis.getHeight();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
lastX=(int)event.getRawX();
lastY=(int)event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
int dx=(int)event.getRawX()-lastX;
int dy=(int)event.getRawY()-lastY;
int top=v.getTop()+dy;
int left=v.getLeft()+dx;
if(top<=0)
{
top=0;
}
if(top>=screenHeight-iv.getHeight())
{
top=screenHeight-iv.getHeight();
}
if(left>=screenWidth-iv.getWidth())
{
left=screenWidth-iv.getWidth();
}
if(left<=0)
{
left=0;
}
v.layout(left, top, left+iv.getWidth(), top+iv.getHeight());
lastX=(int)event.getRawX();
lastY=(int)event.getRawY();
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
}
工程代码下载:Android控件拖动