android - 屏幕上可拖动视图的约束
问题描述
现在按钮垂直超出范围。
它应该只能垂直移动,但不能离开屏幕。在水平方向上,我限制了它的移动。
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
dX = view.getX() - event.getRawX();
dY = view.getY() - event.getRawY();
lastAction = MotionEvent.ACTION_DOWN;
break;
case MotionEvent.ACTION_MOVE:
view.setY(event.getRawY() + dY);
//view.setX(event.getRawX() + dX); (restricted horizontal movement)
lastAction = MotionEvent.ACTION_MOVE;
break;
case MotionEvent.ACTION_UP:
if (lastAction == MotionEvent.ACTION_DOWN)
break;
我希望在我的视图上垂直添加自定义约束。
解决方案
您需要计算总屏幕尺寸并在触发触摸事件时跟踪视图的初始坐标,然后计算新坐标并更新视图在屏幕上的位置。像这样的东西:
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//remember the initial position.
initialX = params.x;
initialY = params.y;
//get the touch location
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
int Xdiff = (int) (event.getRawX() - initialTouchX);
int Ydiff = (int) (event.getRawY() - initialTouchY);
//The check for Xdiff <10 && YDiff< 10 because sometime elements moves a little while clicking.
//So that is click event.
if (Xdiff < 10 && Ydiff < 10) {
if (isViewCollapsed()) {
//When user clicks on the image view of the collapsed layout,
//visibility of the collapsed layout will be changed to "View.GONE"
//and expanded view will become visible.
collapsedView.setVisibility(View.GONE);
expandedView.setVisibility(View.VISIBLE);
}
}
return true;
case MotionEvent.ACTION_MOVE:
//Calculate the X and Y coordinates of the view.
params.x = initialX + (int) (event.getRawX() - initialTouchX);
params.y = initialY + (int) (event.getRawY() - initialTouchY);
//Update the layout with new X & Y coordinate
mWindowManager.updateViewLayout(mFloatingView, params);
return true;
}
return false;
}
推荐阅读
- android - Kotlin嵌套协程启动未触发?
- android - 在 Android 中播放内存流中的 WAV 音频
- python-sphinx - 狮身人面像“示例”或“参考”标题
- facebook - FB上的OG Pic显示未在Android手机上显示完整预览
- c++ - 在空白处终止字符串输入
- php - 异或 PHP 中的两个字符?
- powershell - 在 PowerShell 中将标志从一个脚本移动到另一个脚本
- lua - 加载模块时出错:...未定义符号:luaL_register
- python - 在 Django REST Framework 中,如何根据 GET 查询参数初始化 createAPIView 的字段值?
- java - 生成、转换和计数频率的线程