2017-04-25 166 views
1

我已经实现了缩放图像的on-touch缩放方法,它的工作完美,但我想缩放图像的被触摸区域的那部分将被缩放并且被触摸区域只需要改变位置或缩放在被触摸的区域缩放/缩放imageview

例如:我有一个透明的两个球的图像,如果我将触摸一个球并将其拖动到最接近另一个球,那么只有该球会缩放。

private void dumpEvent(MotionEvent event) 
{ 
String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", 
     "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" }; 
StringBuilder sb = new StringBuilder(); 
int action = event.getAction(); 
int actionCode = action & MotionEvent.ACTION_MASK; 
sb.append("event ACTION_").append(names[actionCode]); 
if (actionCode == MotionEvent.ACTION_POINTER_DOWN 
     || actionCode == MotionEvent.ACTION_POINTER_UP) 
{ 
    sb.append("(pid ").append(
      action >> MotionEvent.ACTION_POINTER_ID_SHIFT); 
    sb.append(")"); 
} 
sb.append("["); 
for (int i = 0; i < event.getPointerCount(); i++) 
{ 
    sb.append("#").append(i); 
    sb.append("(pid ").append(event.getPointerId(i)); 
    sb.append(")=").append((int) event.getX(i)); 
    sb.append(",").append((int) event.getY(i)); 
    if (i + 1 < event.getPointerCount()) 
     sb.append(";"); 
} 
sb.append("]"); 
Log.d(TAG, sb.toString()); 
} 

    @Override public boolean onTouch(View v, MotionEvent event) { 
ImageView view = (ImageView) v; 
dumpEvent(event); 

// Handle touch events here... 
switch (event.getAction() & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_DOWN: 
    savedMatrix.set(matrix); 
    start.set(event.getX(), event.getY()); 
    Log.d(TAG, "mode=DRAG"); 
    mode = DRAG; 
    break; 
case MotionEvent.ACTION_POINTER_DOWN: 
    oldDist = spacing(event); 
    Log.d(TAG, "oldDist=" + oldDist); 
    if (oldDist > 10f) { 
     savedMatrix.set(matrix); 
     midPoint(mid, event); 
     mode = ZOOM; 
     Log.d(TAG, "mode=ZOOM"); 
    } 
    break; 
case MotionEvent.ACTION_UP: 
case MotionEvent.ACTION_POINTER_UP: 
    mode = NONE; 
    Log.d(TAG, "mode=NONE"); 
    break; 
case MotionEvent.ACTION_MOVE: 
    if (mode == DRAG) { 
     // ... 
     matrix.set(savedMatrix); 
     matrix.postTranslate(event.getX() - start.x, event.getY() 
       - start.y); 
    } else if (mode == ZOOM) { 
     float newDist = spacing(event); 
     Log.d(TAG, "newDist=" + newDist); 
     if (newDist > 10f) { 
      matrix.set(savedMatrix); 
      float scale = newDist/oldDist; 
      matrix.postScale(scale, scale, mid.x, mid.y); 
     } 
    } 
    break; 
} 
view.setImageMatrix(matrix); 
return true; 
} 

/** Determine the space between the first two fingers */ 
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); 
} 

/** Calculate the mid point of the first two fingers */ 
private void midPoint(PointF point, MotionEvent event) { 
    float x = event.getX(0) + event.getX(1); 
    float y = event.getY(0) + event.getY(1); 
    point.set(x/2, y/2); 
} 

有没有可能得到那个?

回答

0

我想从你的查询你想实现拖动图像后,它缩放(双击),可能是你的缩放工作完美,但你想要添加一些懒惰后拖动动画,所以我给你完整测试放大/ out/drage imageview类只是取代它与你的老人 我跳它为你工作 对不起,我已经尝试了很多次,但duue对charector限制不能过去的代码听到所以我给你的网址,请去找到类 谢谢
TOuchview class link click on it

+0

我想从你的查询你想实现拖动图像后,它放大它(双击)------但如果我要拖动它,那么它将拖动两个球我只想只有o ne对象被拖动。 –

+0

亲爱的wayne它看起来像你想玩像梦境的图像区域如果我没有错,那么你有两个球在单一图像中的图像现在变焦后,你想只移动一个球,而不是其他单一图像..所以我认为它不可能与图像视图然而,你计算后的视图区域后,你可以绘制并放下它我可以在CANVAS播放面糊只是搜索它,如果你找到解决方案,那么请让我知道谢谢 –

+0

是正好现在你正在得到我的观点.. @ jayman和我对画布的知识较少,所以如果你有任何与此相关的链接,那么它将会对我有帮助...... –