- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在做游戏。我使用 GridView
来显示各种形状的游戏 block (类似俄罗斯方 block )。所以我有 L block 、T block 等。
当玩家触摸并按下一个方 block 时,他可以将它移动到屏幕上的任何地方。每个 block 实际上是一个 GridView,其中很少有彩色单元格和不可见的单元格(取决于 block 形状)。
当方 block 彼此靠近时,就会出现问题,并且您想要移动位于其他方 block “下方”的方 block 。由于 gridView 的形状,触摸绿色 block 的 1 或 2 位置不会触发绿色 block 触摸监听器,而是蓝色(因为蓝色 block 放置在布局上的绿色之后,并且您在其边界内触摸)。所以玩家将开始移动蓝色方 block ,但他当然想移动绿色方 block 。
我该如何解决这个问题?
编辑:
我尝试为每个 Blocks gridView
子级设置触摸监听器(此时不要介意空单元格),并将信息传递给我创建的方法。但是,ACTION_DOWN
有效,但是一旦我移动手指,就会触发 ACTION_UP
(没有任何 ACTION_MOVE
)。
void setBlockTouchListener(final Block block)
{
for (int i = 0; i < block.getChildCount(); i++)
{
block.getChildAt(i).setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
switch (event.getAction() & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
Log.d("TAG", "child down");
onDown(block, X, Y, MotionEvent.ACTION_DOWN);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
Log.d("TAG", "child cancel");
onCancel(block, X, Y, MotionEvent.ACTION_CANCEL);
break;
case MotionEvent.ACTION_MOVE:
Log.d("TAG", "child move");
onMove(block, X, Y, MotionEvent.ACTION_MOVE);
break;
}
return true;
}
});
}
}
Logcat(当我尝试触摸和移动方 block 时):
child_down
child_cancel
最佳答案
尝试调用 requestDisallowInterceptTouchEvent在
之后case MotionEvent.ACTION_DOWN
另一个 View 可能正在窃取触摸事件。这将禁止盗窃。
Block block = ((Block) v.getParent());
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
block.requestDisallowInterceptTouchEvent(true);
onDown(block, X, Y, MotionEvent.ACTION_DOWN);
break;
}
关于java - 仅用于可见单元格的 Gridview touchListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067727/
我是 Android 新手,在遵循在线教程后,我在使用 TicTacToe 游戏的 touchListener 代码块时遇到了问题。 我不断收到的错误是: 对于参数类型 boolean、void,运算
我在做游戏。我使用 GridView 来显示各种形状的游戏 block (类似俄罗斯方 block )。所以我有 L block 、T block 等。 当玩家触摸并按下一个方 block 时,他可以
我有一个包含几个 View 的 FrameLayout。我想将 TouchListener 设置为 frameLayout,布局是在代码中创建的: FrameLayout textLayout = n
我有两个布局 table.xml(port) 和 table.xml(land),其中一个命名为 landscape,另一个命名为 protrait。 我已将此布局包含在另一个名为 fragment_
我有一个带有 SlidingDrawer 的 RelativeLayout。我正在使用抽屉作为菜单。当您单击抽屉中的某个项目时,它会将一个 ImageView 添加到 RelativeLayout。我
我有一个 Canvas ,我在上面设置了一条路径 Path path = new Path(); path.moveTo(1, 1); path.lineTo(90, 1); path.lineTo(
我想让我正在创建的组件的 Drawable 可触摸,有人知道该怎么做吗? final Drawable selected = backgroundSelected; selected.setBound
我正在尝试创建一个自定义 GridView,但我在使用触摸监听器时遇到了问题。 我想做什么: 使用自定义 Views 创建 GridView。 长按某个项目使其变为“可编辑”。 水平或垂直拖动 Vie
我遇到了按钮单击事件和搜索栏事件未触发的问题。当我在搜索栏上拖动时, slider 会在视觉上改变位置,但在我的 OnSeekBarChangedListener 中没有触发任何事件。我还有一个 Im
我有一个 HorizontalScrollView 作为 ListView 的一个项目。每个 HorizontalScrollView 中都有可点击的图像。水平 ScrollView 也应该有
我的结构是这样的: .... 我在 cardview 元素上有一个 onClick/onTouchL
我有两个 TextView,我只想为 TextView 设置 setOnTouchListener。我找到了 this SO answer并按照此答案中的说明进行操作,但我无法解决问题。我正在使用 G
我是一名优秀的程序员,十分优秀!