在触摸坐标上创建视图,但它给出了错误的 x 和 y
Creating view on touch coordinates but it gives wrong x and y
在这个项目中,我打算做的是,当用户触摸屏幕时,它会提示要执行的操作,我已经使用 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);
}
如图所示,但当我增加 Y 值时,效果很好。
v.setY(y-215);
谢谢。
当您触摸 Activity window 时,它会给出带有 actionBar 高度的 y 值。
所以你必须从 y 中减去 actionBar 高度。
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高度也需要减去。
在这个项目中,我打算做的是,当用户触摸屏幕时,它会提示要执行的操作,我已经使用 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);
}
如图所示,但当我增加 Y 值时,效果很好。
v.setY(y-215);
谢谢。
当您触摸 Activity window 时,它会给出带有 actionBar 高度的 y 值。
所以你必须从 y 中减去 actionBar 高度。
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高度也需要减去。