对某个Y坐标执行操作

时间:2016-05-18 12:53:51

标签: android coordinates

我试图在视图被拖动到屏幕上的某个Y坐标时隐藏视图。 这就是我现在所拥有的:

private final class dragTouchListener implements View.OnTouchListener {


    @Override
    public boolean onTouch(View v, MotionEvent event) {

        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                ContentFrameLayout.LayoutParams lParams = (ContentFrameLayout.LayoutParams) v.getLayoutParams();
                _xDelta = X - lParams.leftMargin;
                _yDelta = Y - lParams.topMargin;
                break;
            case MotionEvent.ACTION_UP:
                trash_image.setVisibility(View.INVISIBLE);
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:

                break;
            case MotionEvent.ACTION_MOVE:
                trash_image.setVisibility(View.VISIBLE);

                ContentFrameLayout.LayoutParams layoutParams = (ContentFrameLayout.LayoutParams) v.getLayoutParams();
                layoutParams.leftMargin = X - _xDelta;
                layoutParams.topMargin = Y - _yDelta;
                layoutParams.rightMargin = -250;
                layoutParams.bottomMargin = -250;
                v.setLayoutParams(layoutParams);

                if(v.getY() > trash_image.getY()){
                    v.setVisibility(View.INVISIBLE);
                }

                break;
        }
        contentView.invalidate();
        return true;



    }

}

所以基本上我在这里尝试过的只是一个if语句,用于检查视图的Y位置是否已经过了""另一个ImageView放在屏幕的上半部分。然而,一旦我触摸要拖动的视图,无论它位于屏幕的哪个位置,这都会导致变得不可见。所以它远非准确或错误。

1 个答案:

答案 0 :(得分:1)

根据评论中的要求,提出建议(请注意我必须更改它,因为这是针对客户端程序的,所以我没有再次测试它):

  

首先,发现SCREEN_DENSITY

private static float SCREEN_DENSITY = getResources().getDisplayMetrics().density;
  

onTouch功能:

public boolean onTouch(final View v, MotionEvent event) {
   case MotionEvent.ACTION_DOWN:
      mainFinger = new Point(
         (int) (event.getRawX() / SCREEN_DENSITY),
         (int) (event.getRawY() / SCREEN_DENSITY)
      );
         break;
   case MotionEvent.ACTION_MOVE:
      movFrame(
         (FrameLayout) v,
         (int) (event.getRawX() / SCREEN_DENSITY),
         (int) (event.getRawY() / SCREEN_DENSITY)
      );
}
  

movFrame功能:

private void movFrame(FrameLayout v, int movX, int movY) {
    MyObject p = (MyObject ) v.getTag();
    int[] x, y, h, w;
    x = p.x;
    y = p.y;
    h = p.h;
    w = p.w;
    x = p.x + movX - mainFinger.x;
    mainFinger.x = movX;
    if (x + w > p.parent.w) {
        x = p.parent.w - w;
    }
    if (x < 0) {
        x = 0;
    }
    y = p.y + movY - mainFinger.y;
    mainFinger.y = movY;
    if (y + h > p.parent.h) {
        y = p.parent.h - h;
    }
    if (y < 0) {
        y = 0;
    }
    p.updateMyObject(x, y, h, w);
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
            (int) ((p.w * SCREEN_DENSITY) + 0.5),
            (int) ((p.h * SCREEN_DENSITY) + 0.5)
    );
    params.leftMargin = (int) ((p.x * SCREEN_DENSITY) + 0.5);
    params.topMargin = (int) ((p.y * SCREEN_DENSITY) + 0.5);
    v.setLayoutParams(params);
}