ImageView自由移动
第一种:根据点击位置确定图片的左上角
?
@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));}}?