android:如何检测用户何时触摸20%的视图区域?

时间:2017-02-02 03:47:24

标签: android motionevent android-touch-event

使用

activity

public boolean dispatchTouchEvent(MotionEvent ev)

我怎么知道用户触摸左边Y-axis的边缘区域为20%?

应处理通用和方向。 我不想在其上创建任何隐藏的视图。

2 个答案:

答案 0 :(得分:4)

  • 获取设备宽度
  • 计算左边20%的宽度尺寸(从0到X)
  • 使用event.getX()
  • 检查event.getX()是否在20%
  • 的设备内

enter image description here

示例:

public class YourActivity extends Activity {

        private LinearLayout background;
        private float xValue, yValue, leftPersentage;
        private int height,width;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);

            DisplayMetrics displaymetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            height = displaymetrics.heightPixels;
            width = displaymetrics.widthPixels;

            leftPersentage = (width)*20/100;

            background = (LinearLayout) findViewById(R.id.background);
            background.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    xValue = event.getX();
                    yValue = event.getY();
                    Log.d("Values Clicked" , xValue +"and" + yValue);
                    if(xValue <= leftPersentage){
                        // perform your task 
                        Log.d("Values Clicked onLeft" , xValue +"and" + yValue);
                    }

                    return false;
                }
            });
        }
    }

答案 1 :(得分:1)

获取显示尺寸,然后从触摸事件中获取点。比较数学,知道它是否留下20%。

获取显示尺寸

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();    
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;

获取接触点。

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    float touchedX = ev.getX();
    float touchedY = ev.getY();
    return super.dispatchTouchEvent(ev);
}