在实际开发中很多地方都要用自定义的手势缩放和可移动的view,在下在开发不久的时候就遇到啦,当时还不懂手势拖动,经过了各种摸索和查阅终于是自己写出来了,感觉收获颇多,这里我是用的矩阵来对自定义的ImageView进行手势缩放和移动的,感觉matrix真是强大的,稍后我定要详细研究一下Matrix, 之后也会写一片博客大家一起讨论啊,学好数学还真是有用,这里我用的OntouchEvent来做的,下面看代码:
- 第一点
这里先添加一个view, 我使用的是bitmap来添加的,后面我要使用它的宽度和高度,大家都知道能不用bitmap尽量不用,如果谁有好的方案要给我留言啊,我表示非常感谢,这里我使用一个list来保存所有的可移动的view(下面统称为view), 使用selectImageCount 来确定你选中和要移动的是哪个view, 这里主要的是要记录当前view的坐标,以便后续对它进行缩放和移动
// 添加贴纸图片
private void addGesturesView(Bitmap b) {
//将其他贴纸取消选中
if (b != null) {
for (int i = (list_V.size() - 1); i >= 0; i--) {
StickersHolder stickersHolder = list_V.get(i);
if (stickersHolder.getImgV().isSelect()) {
stickersHolder.getImgV().setSelect(false);
break;
}
}
curruntEditImageView = new MyCustomView(this, b);
curruntEditImageView.setLayoutParams(new ViewGroup.LayoutParams(MyApplication.getInstance().getScreenWidth(),
MyApplication.getInstance().getScreenHeight()));
curruntEditImageView.setScaleType(ImageView.ScaleType.MATRIX);
curruntEditImageView.setImageBitmap(b);
curruntEditImageView.setSelect(true);
curruntEditImageView.invalidate();
frame.addView(curruntEditImageView);
curruntTiezhiBitmap = b;
int bW = b.getWidth();
int bH = b.getHeight();
Matrix imageMatrix = new Matrix(curruntEditImageView.getImageMatrix());
//设置图片的宽度 为了适应屏幕
int newW = MyApplication.getInstance().getScreenWidth() / 3;
//等比例缩放
int newH = (int) (((float) newW / (float) bW) * (float) bH);
float scale = ((float) newW) / bW;
imageMatrix.postScale(scale, scale, 0, 0);// 缩放图片大小
int x1 = MyApplication.getInstance().getScreenWidth() / 3;
int y1 = MyApplication.getInstance().getScreenHeight() / 3;
// 原图左上角
curruntEditImageView.leftTop.set(x1, y1);
// 原图右上角
curruntEditImageView.rightTop.set(x1 + newW, y1);
// 原图左下角
curruntEditImageView.leftBottom.set(x1, y1 + newH);
// 原图右下角
curruntEditImageView.rightBottom.set(x1 + newW, y1 + newH);
imageMatrix