2017-04-25 69 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和我對畫布的知識較少,所以如果你有任何與此相關的鏈接,那麼它將會對我有幫助...... –