我试图在android中实现两个手指旋转,但它并没有按预期工作.目标是实现像Google Earth一样的旋转(双指旋转焦点周围的图像).目前我的旋转侦听器如下所示:
private class RotationGestureListener {
private static final int INVALID_POINTER_ID = -1;
private float fX, fY, sX, sY, focalX, focalY;
private int ptrID1, ptrID2;
public RotationGestureListener(){
ptrID1 = INVALID_POINTER_ID;
ptrID2 = INVALID_POINTER_ID;
}
public boolean onTouchEvent(MotionEvent event){
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
sX = event.getX();
sY = event.getY();
ptrID1 = event.getPointerId(0);
break;
case MotionEvent.ACTION_POINTER_DOWN:
fX = event.getX();
fY = event.getY();
focalX = getMidpoint(fX, sX);
focalY = getMidpoint(fY, sY);
ptrID2 = event.getPointerId(event.getActionIndex());
break;
case MotionEvent.ACTION_MOVE:
if(ptrID1 != INVALID_POINTER_ID && ptrID2 …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android应用程序(API 19 4.4),我遇到了ImageViews的一些问题.我有一个SurfaceView,我在其中动态添加我想对触摸事件做出反应的ImageViews.到目前为止,我已经成功地使ImageView移动并且平滑地缩放,但是我有一个讨厌的行为.
当我将图像缩小到一定限度(我会说原始尺寸的一半)并且我尝试移动它时,图像闪烁.经过简短的分析,它似乎是围绕屏幕上的手指点对称地切换它的位置,累积距离,最后消失(所有这些都发生得非常快(<1s).我想我错过了与亲戚的关系触摸事件对ImageView/SurfaceView的价值,但我是一个相当的菜鸟,我被困了......
这是我的代码
public class MyImageView extends ImageView {
private ScaleGestureDetector mScaleDetector ;
private static final int MAX_SIZE = 1024;
private static final String TAG = "MyImageView";
PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down
PointF StartPT = new PointF(); // Record Start Position of 'img'
public MyImageView(Context context) {
super(context);
mScaleDetector = new ScaleGestureDetector(context,new MySimpleOnScaleGestureListener());
setBackgroundColor(Color.RED);
setScaleType(ScaleType.MATRIX);
setAdjustViewBounds(true);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(-MAX_SIZE, -MAX_SIZE, -MAX_SIZE, -MAX_SIZE);
this.setLayoutParams(lp);
this.setX(MAX_SIZE);
this.setY(MAX_SIZE);
}
int …
Run Code Online (Sandbox Code Playgroud)