android: how can I detect when user touch left 20% of view area?

Deadly 提交于 2019-12-12 17:24:24

问题


In an activity by using

public boolean dispatchTouchEvent(MotionEvent ev)

how can I know an user is touching left Y-axis of 20% edge area?

It should be generic and orientation handled. I don't want to create any hidden view on that.


回答1:


  • Get device width
  • Calculate left 20% width size (from 0 to X)
  • Use event.getX()
  • Check that event.getX() is inside device with 20%

example :

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;
                }
            });
        }
    }



回答2:


Get the display size then get the point from touch event. Compare it mathematically to know if its left 20% or not.

get display size

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

get the touch points.

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


来源:https://stackoverflow.com/questions/41993859/android-how-can-i-detect-when-user-touch-left-20-of-view-area

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!