我的应用程序使用一个Activity来托管多个片段.每次在电话屏幕上显示一个片段.每个片段的视图由几个图像图标组成.
目前,用户可以用两个手指同时按下两个图标(每个图标按下一个图标).我想在我的应用程序上禁用此多点触控功能,以便一次只允许一个图标按下.
我尝试了以下方法:
方式1:在我的应用主题中,我补充说:
<item name="android:windowEnableSplitTouch">false</item>
Run Code Online (Sandbox Code Playgroud)
方式2:在Android Manifest xml中,我添加了:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
方式3:在我的活动中:
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getPointerCount() > 1) {
System.out.println("Multitouch detected!");
return true;
}
else
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的解决方案都没有用.那么,如何在我的应用程序中禁用多点触控功能?
android android-emulator android-intent android-layout android-fragments
我现在不得不放弃这个纯粹的学术问题,但我非常希望能在近期看到解决方案.
由于Android处理多点触控的方式,你可以(我认为)只在一个视图中捕获事件.我已经尝试了一个hack来解决这个容器布局,拦截事件通过查看coords并更改动作本身来查看它所属的View,这样组件看起来就是单个触摸事件.我撰写此类事件然后将其路由到视图.
有没有人有更好的想法这样做?
如果有人想要我上面描述的代码只是问我发布它!
玩得开心,祝你好运:D JQCorreia
public class Container extends LinearLayout
{
LinkedHashMap<Integer,View> pointers = new LinkedHashMap<Integer,View>();
ArrayList<View> views = new ArrayList<View>();
public Container(Context context) {
super(context);
initialize(context);
}
public Container(Context context, AttributeSet attrs) {
super(context, attrs);
initialize(context);
}
private void initialize(Context context)
{
}
@Override
public void onLayout(boolean changed, int l, int t, int r, int b)
{
super.onLayout(changed, l, t, r, b);
views = LayoutUtil.flattenLayout(this,false);
for(View foo : views)
{
Rect rect = new Rect();
foo.getGlobalVisibleRect(rect);
}
} …Run Code Online (Sandbox Code Playgroud) 出于某些原因,我必须在我的应用程序上禁用多点触控功能.用户一次只能按一个按钮,否则应用程序会崩溃.有没有办法实现这个要求?
非常感谢!