第一种:根据点击位置确定图片的左上角
@SuppressWarnings("deprecation")
public class MoveImage extends Activity {
private ImageView mImageView01;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.move_image);
mImageView01 = (ImageView) findViewById(R.id.imageView1);
mImageView01.setImageResource(R.drawable.img1);
}
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
picMove(mImageView01, x, y);
break;
case MotionEvent.ACTION_MOVE:
picMove(mImageView01, x, y);
break;
case MotionEvent.ACTION_UP:
picMove(mImageView01, x, y);
break;
}
return super.onTouchEvent(event);
}
private void picMove(ImageView image, float x, float y) {
float positionX = x, positionY = y;
image.setDrawingCacheEnabled(true);
Bitmap bmp = Bitmap.createBitmap(image.getDrawingCache());
image.setDrawingCacheEnabled(false);
int intHeight = bmp.getHeight();
int intWidth = bmp.getWidth();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm); /* 取得屏幕解析像素 */
int intScreenX = dm.widthPixels;
int intScreenY = dm.heightPixels;
if(x >= ( intScreenX - intWidth ) && y <= ( intScreenY - intHeight )){
positionX = intScreenX - intWidth;
}
else if(x <= ( intScreenX - intWidth ) && y >= ( intScreenY - intHeight )){
positionY = intScreenY - intHeight;
}
else if(x > ( intScreenX - intWidth ) && y > ( intScreenY - intHeight )){
positionX = intScreenX - intWidth;
positionY = intScreenY - intHeight;
}
image.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,
intHeight, (int) positionX, (int) positionY));
}
}
注意:layout的xml文件的imageView必须包含在AbsoluteLayout中
第二种:根据点击位置确定图片的中心位置
@SuppressWarnings("deprecation")
public class MoveImage2 extends Activity {
private ImageView mImageView01;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.move_image);
mImageView01 = (ImageView) findViewById(R.id.imageView1);
mImageView01.setImageResource(R.drawable.img1);
}
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
picMove(mImageView01, x, y);
break;
case MotionEvent.ACTION_MOVE:
picMove(mImageView01, x, y);
break;
case MotionEvent.ACTION_UP:
picMove(mImageView01, x, y);
break;
}
return super.onTouchEvent(event);
}
private void picMove(ImageView image, float x, float y) {
image.setDrawingCacheEnabled(true);
Bitmap bmp = Bitmap.createBitmap(image.getDrawingCache());
image.setDrawingCacheEnabled(false);
int intHeight = bmp.getHeight();
int intWidth = bmp.getWidth();
float positionX = x - intWidth/2, positionY = y - intHeight/2;
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm); /* 取得屏幕解析像素 */
int intScreenX = dm.widthPixels;
int intScreenY = dm.heightPixels;
if(x <= (intWidth / 2) && y <= (intHeight / 2)){
positionX = 0;
positionY = 0;
}
else if(x <= (intWidth / 2) && y >= (intScreenY - intHeight / 2)){
positionX = 0;
positionY = intScreenY - intHeight;
}
else if(x >= (intScreenX - intWidth / 2) && y <= (intHeight / 2)){
positionX = intScreenX - intWidth;
positionY = 0;
}
else if(x >= (intScreenX - intWidth / 2) && y >= (intScreenY - intHeight / 2)){
positionX = intScreenX - intWidth;
positionY = intScreenY - intHeight;
}
else if(x <= (intScreenX - intWidth / 2) && x >= (intWidth / 2) && y <= (intHeight / 2)){
positionY = 0;
}
else if(x <= (intScreenX - intWidth / 2) && x >= (intWidth / 2) && y >= (intScreenY - intHeight / 2)){
positionY = intScreenY - intHeight;
}
else if(x <= (intWidth / 2) && y <= (intScreenY - intHeight / 2) && y >= (intHeight / 2)){
positionX = 0;
}
else if(x >= (intScreenX - intWidth / 2) && y <= (intScreenY - intHeight / 2) && y >= (intHeight / 2)){
positionX = intScreenX - intWidth;
}
image.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,
intHeight, (int) positionX, (int) positionY));
}
}