在一个View的onDraw里面,根据传入的坐标(例如:(100,100))绘制一些点,然后View的Ontouch事件里面,双指对view进行缩放,然后计算出缩放率(比如缩放了2倍:2f),现在问题是:算出缩放率后怎么计算绘制的点的最新坐标?因为缩放时,中心点是变化的,所以直接用缩放率和点的坐标相乘是不行的~
因为点的坐标后面还需要用到其他地方,所以必须要计算出坐标,不然就直接缩放canvas了~~
或者有其他方法实现吗(根据坐标画一些点,再缩放)~求大神指点~跪谢!
因为点的坐标后面还需要用到其他地方,所以必须要计算出坐标,不然就直接缩放canvas了~~
或者有其他方法实现吗(根据坐标画一些点,再缩放)~求大神指点~跪谢!
解决方案 »
- android中如何导入第三方jar包
- android刚开始创建时,有选择默认图标或什么的。程序写完后,再怎么改?不想修改res下的文件,太麻烦。
- ANDROID有关SILENT MODE 功能修改
- 自定义ImageView控件问题
- [提问] Android系统中,如何关联文件类型?
- 基于Rexsee地图API实现的Android地图导航功能实战
- 如何获取稳定版本的android源码?最新代码编译通不过
- 安卓分享音乐文件后点击可自动播放的问题
- 如何实现音频无缝循环播放?
- 急求!!!如何不用shape设置listview item的圆角!!!
- android应用开发:如何实现一个平台管理多个应用的解决方案?
- 如何实现一种从中间向两边的布局
大概的代码是这样子的 @Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
lastPoint.set(event.getX(), event.getY());
break;
case MotionEvent.ACTION_UP:
break; case MotionEvent.ACTION_POINTER_DOWN:
isPinch = true;
lastSpace = pinchSpace(event);
lastRotate = pinchRotation(event);
lastPoint = pinchCenter(event);
break;
case MotionEvent.ACTION_POINTER_UP:
isPinch = false;
break;
case MotionEvent.ACTION_MOVE:
PointF point = new PointF(event.getX(), event.getY());
if (isPinch) {
float space = pinchSpace(event);
float rotate = pinchRotation(event);
PointF center = pinchCenter(event); matrix.postScale(space / lastSpace, space / lastSpace, center.x, center.y);
matrix.postRotate(rotate - lastRotate, center.x, center.y); lastSpace = space;
lastRotate = rotate;
point = center;
}
float dx = point.x - lastPoint.x;
float dy = point.y - lastPoint.y;
lastPoint = point;
matrix.postTranslate(dx, dy);
invalidate();
break;
}
return true;
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mBitmap == null) {
return;
}
canvas.concat(matrix);
canvas.drawBitmap(mBitmap, 0, 0, mPaint);
drawOrigin(canvas);
} private void drawOrigin(Canvas canvas) {
if (mOrigin != null) {
drawArrow(canvas, (float) mOrigin.x, (float) mOrigin.y, 50, (float) mOrigin.t, Color.RED);
}
}