Создание вида по сенсорным координатам, но оно дает неправильные значения x и y - PullRequest
0 голосов
/ 22 января 2020

В этом проекте я хочу сделать, когда пользователь касается экрана, он предлагает действия, которые я использовал, я использовал QuickAction , чтобы выполнить действие, но когда я использую onTouch, создайте представление с его x и y, дайте мне представление действия в неправильных координатах.

RelativeLayout mine;
QuickAction quickIntent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mine = (RelativeLayout) LayoutInflater.from(EmptyActivity.this).inflate(R.layout.activity_empty, null, false);
    setContentView(mine);


    quickIntent = new QuickAction(EmptyActivity.this, QuickAction.HORIZONTAL);
    quickIntent.addActionItem(new ActionItem(1, "Star", android.R.drawable.star_on));
    quickIntent.addActionItem(new ActionItem(2, "Star", android.R.drawable.star_on));
    quickIntent.addActionItem(new ActionItem(3, "Star", android.R.drawable.star_on));

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    int x = (int)event.getX();
    int y = (int)event.getY();
    if(event.getAction() == MotionEvent.ACTION_DOWN){
        View v = new View(EmptyActivity.this);
        v.setBackgroundColor(getResources().getColor(R.color.colorPrimary));
        v.setLayoutParams(new LinearLayout.LayoutParams(5, 5));
        v.setX(x);
        v.setY(y);
        mine.addView(v);
        quickIntent.show(v);

        return true;
    }

    return super.onTouchEvent(event);
}

enter image description here

Как на изображении, но когда я увеличиваю Y, работает нормально.

v.setY(y-215);

enter image description here

Спасибо.

1 Ответ

1 голос
/ 22 января 2020

Когда вы касаетесь окна Activity, оно дает значение y с actionBar height.

Таким образом, вы должны вычесть actionBar height из y.

Код для высоты ActiobBar

final TypedArray styledAttributes = getBaseContext().getTheme().obtainStyledAttributes(
            new int[] { android.R.attr.actionBarSize });
int mActionBarSize = (int) styledAttributes.getDimension(0, 0);
            styledAttributes.recycle();

Теперь ваше значение y будет

y = y-mActionBarSize;

Чтобы быть более точным TitleBar , высоту также необходимо вычесть.

...