这个程序实现的是,拖动画面上的图片,图片会随着你的手到哪图片到哪。
下面给出这个程序的实现代码:
public class EX07_04 extends Activity {
/*宣告ImageView变量*/
private ImageView mImageView01;
/*宣告相关变量作为储存图片宽高,位置使用*/
private int intWidth, intHeight, intDefaultX, intDefaultY;
private float mX, mY;
/*宣告储存屏幕的分辨率变量 */
private int intScreenX, intScreenY;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 取得屏幕对象 */
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
/* 取得屏幕解析像素 */
intScreenX = dm.widthPixels;
intScreenY = dm.heightPixels;
/* 设定图片的宽高 */
intWidth = 100; intHeight = 100;
/*透过findViewById建构子建立ImageView对象*/
mImageView01 =(ImageView) findViewById(R.id.myImageView1);
/*将图片从Drawable指派给ImageView来呈现*/
mImageView01.setImageResource(R.drawable.baby);
/* 初始化按钮位置置中 */ RestoreButton();
/* 当按下ImageView,还原初始位置 */
mImageView01.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) { RestoreButton();
}
});
}
/*覆写触控事件*/
@Override
public boolean onTouchEvent(MotionEvent event) {
/*取得手指触控屏幕的位置*/
float x = event.getX();
float y = event.getY();
try {
/*触控事件的处理*/
switch (event.getAction()) {
/*点选屏幕*/
case MotionEvent.ACTION_DOWN:
picMove(x, y);
break;
/*移动位置*/
case MotionEvent.ACTION_MOVE:
picMove(x, y);
break;
/*离开屏幕*/
case MotionEvent.ACTION_UP:
picMove(x, y);
break;
}
}catch(Exception e) {
e.printStackTrace();
}
return true;
}
/*移动图片的方法*/
private void picMove(float x, float y) {
/*默认微调图片与指针的相对位置*/
mX=x-(intWidth/2);
mY=y-(intHeight/2);
/*防图片超过屏幕的相关处理*/
/*防止屏幕向右超过屏幕*/
if((mX+intWidth)>intScreenX) {
mX = intScreenX-intWidth;
}
/*防止屏幕向左超过屏幕*/
else if(mX<0) {
mX = 0;
}
/*防止屏幕向下超过屏幕*/
else if ((mY+intHeight)>intScreenY) {
mY=intScreenY-intHeight;
}
/*防止屏幕向上超过屏幕*/
else if (mY<0) {
mY = 0;
}
/*透过log 来检视图片位置*/
Log.i("jay", Float.toString(mX)+","+Float.toString(mY));
/* 以setLayoutParams方法,重新安排Layout上的位置 */
mImageView01.setLayoutParams (
new AbsoluteLayout.LayoutParams (intWidth,intHeight,(int) mX,(int)mY) );
}
/* 还原ImageView位置的事件处理 */
public void RestoreButton() {
intDefaultX = ((intScreenX-intWidth)/2);
intDefaultY = ((intScreenY-intHeight)/2);
/*Toast还原位置坐标*/
mMakeTextToast ( "("+ Integer.toString(intDefaultX)+ ","+ Integer.toString(intDefaultY)+")",
true );
/* 以setLayoutParams方法,重新安排Layout上的位置 */
mImageView01.setLayoutParams (
new AbsoluteLayout.LayoutParams (intWidth,intHeight,intDefaultX,intDefaultY) );
}
/*自定义一发出讯息的方法*/
public void mMakeTextToast(String str, boolean isLong) {
if(isLong==true) {
Toast.makeText(EX07_04.this, str, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(EX07_04.this, str, Toast.LENGTH_SHORT).show();
}
}
}