我已經實現了一個ZoomViewGroup
,它能夠無限地向各個方向滾動,並且可以無限地縮放,同時仍然正確地向其子View
s正確提供所有的觸摸事件。MotionEvent多點觸控偏移量(多指針)
但是,當涉及到多點觸摸,只有第一個指針偏移正確,和所有其他人都指向了錯誤的位置,那是因爲有比例因子我要照顧。 (作爲指針0有不同的從其原始位置偏移比指針1或2,當scaling_factor != 1.0f
)
我救了我的轉變在Matrix
,所以很容易從屏幕計算座標到工作區和背部使用matrix.mapPoints(..)
和矩陣逆。
當我畫了孩子的意見,我可以申請轉換矩陣是這樣的:
protected void dispatchDraw(Canvas canvas)
{
canvas.save();
canvas.concat(transformation_matrix);
super.dispatchDraw(canvas);
canvas.restore();
}
同樣的,觸摸事件:
float[] touch_array = new float[2];
public boolean dispatchTouchEvent(MotionEvent event)
{
touch_array[0] = event.getX();
touch_array[1] = event.getY();
transformation_matrix.mapPoints(touch_array);
event.setLocation(touch_array[0], touch_array[1]);
return super.dispatchTouchEvent(event);
}
但MotionEvent.setLocation(float x, float y)
並實際上是由相同的偏移所有指針量。如果我們2.0F放大的偏移量是每個指針不同,所以我必須要能夠做到像MotionEvent.setLoction(int pointer_index, float x, float y)
爲每個單獨的一個。有什麼我可以做到這一點?
但這種方式,你將它們分割在這裏 – bricklore
好一個孩子不能收到多點觸摸事件,我做了一個關於多點觸控概述,可以實現在孩子dispatchTouchEvent代碼。 –
請注意,你可能要解析作爲家長或在兩個不同的childrem視圖中的兩個separete DragsGestures一個PanGesture,你必須考慮你要分析做的最好的辦法的情況下。 –