安卓:如何检测用户触摸视图区域的左侧20%?

3
在一个 activity 中,通过使用 public boolean dispatchTouchEvent(MotionEvent ev) 方法,我如何知道用户是否触摸了左侧 20% 边缘区域的 Y 轴?它应该是通用的并且支持横竖屏。我不想在那里创建任何隐藏的视图。

1
获取触摸的x和y,然后与屏幕x和y的20%进行比较。 - Keyur Thumar
@DayDayHappy,你能在那个特定的区域显示一些颜色,以清除视图区域左侧20%的内容吗? - Charuක
2个回答

8
  • 获取设备宽度
  • 计算左侧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

获取显示屏尺寸,然后从触摸事件中获取点。通过数学比较来判断它是否在左侧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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接