我在surfaceview中有一个Bitmap。 我正在使用多点触控来处理缩放和拖动等手势,问题是当我缩放位图时,我不希望它能够缩小那么多,它不会覆盖整个显示器(表面视图)。我找不到解决这个问题的方法,因为我无法找到一种方法来获得当前缩小的位图当前高度或宽度。
以下是我的一些代码:
private void multiTouchBehavior(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_POINTER_2_DOWN)
{
_oldDist = spacing(event);
if(_oldDist > 10f) // just be secure of a bug in the API
{
_saved.set(_matrix);
_mid = midPoint(event);
}
}
else if(event.getAction() == MotionEvent.ACTION_MOVE)
{
_newDist = spacing(event);
if(_newDist > 10f)
{
_matrix.set(_saved);
float scale = _newDist / _oldDist;
_matrix.postScale(scale, scale, _mid.x, _mid.y);
}
}
}
以下是方法间距(事件)中发生的事情:
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
我的onDraw(画布)只是canvas.drawBitmap(myBitmap,_matrix,null)
任何人都知道如何解决这个问题?
所以只是为了确保你能解决我的问题,把它想象成我想要放大的世界大地图,当然,当你已经放大时,可以放大,但不允许它要比开始时更多地缩放。
答案 0 :(得分:0)
找到我的解决方案,可能有更好的方法,但现在我使用:
matrix.mapRadius(1);
我可以比较初始化为beggining中该方法值的变量。
编辑:
float[] f = new float[9];
matrix.getValues(f);
float xScale = f[0];
float yScale = f[3];
效果更好,更容易。