(Android)如何获取其他指针的MotionEvent.getRaw

时间:2017-03-17 10:13:39

标签: android multi-touch motionevent

获取其他指针的MotionEvent.getRaw ...

我尝试了所有

event.offsetLocation(event.getRawX()-event.getX(),event.getRawY()-event.getY());

void getRowPoint(MotionEvent ev, int index, PointF point){
    final int location[] = { 0, 0 };
    getLocationOnScreen(location);

    float x=ev.getX(index);
    float y=ev.getY(index);

    double angle=Math.toDegrees(Math.atan2(y, x));
    angle+=getRotation();

    final float length=PointF.length(x,y);

    x=(float)(length*Math.cos(Math.toRadians(angle)))+location[0];
    y=(float)(length*Math.sin(Math.toRadians(angle)))+location[1];

    point.set(x,y);
}

 Method getRawAxisValueMethod = MotionEvent.class.getDeclaredMethod(
            "nativeGetRawAxisValue", long.class, int.class, int.class, int.class);
    Field nativePtrField = MotionEvent.class.getDeclaredField("mNativePtr");
    Field historyCurrentField = MotionEvent.class.getDeclaredField("HISTORY_CURRENT");
    getRawAxisValueMethod.setAccessible(true);
    nativePtrField.setAccessible(true);
    historyCurrentField.setAccessible(true);

    float x = (float) getRawAxisValueMethod.invoke(null, nativePtrField.get(event),
            MotionEvent.AXIS_X, pointerIndex, historyCurrentField.get(null));
    float y = (float) getRawAxisValueMethod.invoke(null, nativePtrField.get(event),
            MotionEvent.AXIS_Y, pointerIndex, historyCurrentField.get(null));
// ........................... //

但如果将视图旋转为rotationY或者旋转X

,则一切都无效

0 个答案:

没有答案