在没有硬件导航键的Android 4.0设备上,Android会渲染导航栏.
如果您愿意,可以隐藏它setSystemUiVisibility()
.
如果这样做,让我们说如果你想获得尽可能多的屏幕进行播放,当你第一次触摸屏幕时(是的,在View
你实现的时候View.onTouchEvent()
),第一次触摸将被Android劫持,你的API将不会被调用.只有一个导航栏可见,它才会被调用.
现在,通过听取以下内容可以避免这种情况:
http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html
当导航栏可见时,只需执行首次触摸即可执行的操作.
有没有其他方法可以做同样的事情,那就是Android 4.0会在导航栏完成之后将触摸事件传播到我的应用程序?
我需要知道如何在Android中为Gingerbread版本实现Drag&Drop.据我所知,Gingerbread默认不支持.
我编码的内容:一个ViewGroup
用来保持动态添加的孩子的班级,每个孩子应该在长时间点击之后能够通过手指点击/移动.为了解决这个问题,我已经OnLongClickListener
附加了每个View
孩子,我ViewGroup
已经实现了onTouch()
获取向下/向上/移动事件的方法onLongClick()
以及响应每个孩子长按的方法.
现在我的问题如下:我长时间点击一个孩子,我可以移动它并可以通过ACTION_UP
事件结束动作.但是,我不能再次点击这个孩子了 - 有没有办法可以处理这个问题?
我想,我并不需要一个真正的d&d库/函数,因为我只会在这个点一些图标ViewGroup
-每个孩子被添加到ViewGroup
通过代码,所以我没有一个真正的DropTarget我想.
android drag-and-drop touch-event onlongclicklistener viewgroup
在我的项目中使用onTouchEvent来检测屏幕上的触摸并相应地执行操作,并使用viewPager进行滑动操作.滑动问题是触摸操作正在执行.所以从这里找到解决方案解决了它.但我的新问题是,一旦TouchEvent.Action_up被执行,触摸就会被禁用.代码如下:
parent.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_MOVE:
awesomePager.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
awesomePager.requestDisallowInterceptTouchEvent(true);
if(flag)
{
upperdock.setClickable(false);
upperdock.bringToFront();
tocparent.bringToFront();
tocbottom.bringToFront();
upperdock.setVisibility(RelativeLayout.VISIBLE);
tocparent.setVisibility(LinearLayout.VISIBLE);
tocbottom.setVisibility(LinearLayout.VISIBLE);
flag=false;
}
else
{
parent.bringToFront();
upperdock.setVisibility(RelativeLayout.INVISIBLE);
tocparent.setVisibility(LinearLayout.INVISIBLE);
tocbottom.setVisibility(LinearLayout.INVISIBLE);
flag=true;
}
break;
case MotionEvent.ACTION_CANCEL:
awesomePager.requestDisallowInterceptTouchEvent(false);
break;
default:
break;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,如果我返回false,则Action_up没有被执行..如果我返回true,则Action_cancel没有被执行..这是通过值传递的问题.
我正在动态地将图像视图添加到父版面.我正在onTouch添加图像执行放大/缩小操作.我想删除它上面的onLongPress的添加视图.
img.setOnLongClickListener(longClickAction);
img.setOnTouchListener(touchAction);
Run Code Online (Sandbox Code Playgroud)
onLongPress:
OnLongClickListener longClickAction = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
parentLayout.removeView((ImageView)v);
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
onTouch:
OnTouchListener touchAction = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView i = (ImageView)v;
//perfrom zoom operation on touch of imageview
zoom(i, event);
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
只有Touch事件正在运行.为什么?我怎么能同时拥有?我哪里出错了?我该怎么做才能删除添加的视图?请帮我.提前致谢.
我在布局中有一个ImageView,并在ImageView上设置OnTouchListener来拖动ImageView.它工作得很好.我的问题是如何防止将ImageView移出布局范围?
这是我的代码:
活动类:
public class RepositionTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reposition_test_layout);
ImageView imageView = (ImageView)findViewById(R.id.android);
imageView.setOnTouchListener(new Touch());
}
}
Run Code Online (Sandbox Code Playgroud)
触摸类:
public class Touch implements OnTouchListener {
private static final int NONE = 0;
private static final int DRAG = 1;
private static final int ZOOM = 2;
private static final float MIN_ZOOM = 1f;
private static final float MAX_ZOOM = 5f;
private Matrix matrix = new Matrix();
private Matrix savedMatrix = new Matrix();
private …
Run Code Online (Sandbox Code Playgroud) 在Mobile Safari中,有没有办法区分触摸事件是由手指还是Apple Pencil生成的?
我在 iPhone 6 设备上滚动时遇到了这个问题(在 Safari 和 Chrome 上测试):
给定一个可滚动的 div,如果我在 div 已经处于惯性滚动运动时触摸它,滚动运动会按预期停止,但touchstart
事件根本不会触发。
当小米Android装置(在Chrome测试)测试的滚动停止与该touchstart
事件被触发。
为什么touchstart
没有触发?。这是 iPhone 上的标准行为吗?
我已经设置了一个小提琴来测试这种行为:
https://fiddle.jshell.net/galoxia/L63wj9or/
只需做出手势以“激活”蓝色框上的惯性滚动,然后再次触摸以停止它。在 Android 上,您将touchstart
在黄色框中看到。在 iPhone 上你不会。
假设我Container
在屏幕上有 3秒通过改变颜色来对触摸做出反应。当用户的手指在它们上面时,它们应该改变颜色,当触摸末端时,它们应该恢复正常。我想要的是这些容器在用户手指/指针指向它们时做出反应,即使触摸是在容器外部的屏幕上的随机区域开始的。所以基本上我正在寻找的东西就像 css 悬停。
如果我GestureDetector
单独包装每个容器,它们将不会对在它们之外开始的触摸事件做出反应。在另一个问题上(不幸的是,我现在没有链接)建议将所有容器用一个包装起来,GestureDetector
并GlobalKey
为每个容器分配一个以区分它们。
这是检测触摸手势的板:
class MyBoard extends StatefulWidget {
static final keys = List<GlobalKey>.generate(3, (ndx) => GlobalKey());
...
}
class _MyBoardState extends State<MyBoard> {
...
/// I control the number of buttons by the number of keys,
/// since all the buttons should have a key
List<Widget> makeButtons() {
return MyBoard.keys.map((key) {
// preapre some funcitonality here
var someFunctionality;
return MyButton(key, someFunctionality);
}).toList();
}
@override
Widget …
Run Code Online (Sandbox Code Playgroud) My FlutterMap
( flutter_map
),响应缩放/平移/点击手势 \n 是 a 的最后一个元素CustomScrollView
,它本身就是 a 的页面之一PageView
。
TL/DR:我希望地图始终能够获取事件。
\n\n\n\n如图所示,左右触摸事件用于PageView
滚动页面。向上-向下事件用于CustomScrollView
滚动条子。所以地图通常不会收到任何事件,或者随机地,某些事件 \xe2\x9a\x94\xef\xb8\x8f赢得了竞技场战斗并让用户与地图交互。
\xe2\x9d\x99 \xe2\x98\x85 Opening new gesture arena.\n \xe2\x9d\x99 Adding: TapGestureRecognizer#df66a(debugOwner: GestureDetector, state: ready, button: 1)\n \xe2\x9d\x99 Adding: VerticalDragGestureRecognizer#2b952(start behavior: start)\n \xe2\x9d\x99 Adding: HorizontalDragGestureRecognizer#dbeae(start behavior: start)\n \xe2\x9d\x99 Closing with 3 members.\n \xe2\x9d\x99 Rejecting: TapGestureRecognizer#df66a(debugOwner: GestureDetector, state: possible, button: 1)\n \xe2\x9d\x99 Accepting: VerticalDragGestureRecognizer#2b952(start behavior: start)\n \xe2\x9d\x99 Self-declared winner: VerticalDragGestureRecognizer#2b952(start behavior: start)\n
Run Code Online (Sandbox Code Playgroud)\n\n自称的获胜者几乎VerticalDrag
总是 …
我正在尝试在 jQuery 终端的较少扩展中实现触摸滚动。它的工作方式类似于 less unix 命令。
我有这个代码:
self.touch_scroll(function(event) {
// how much difference changed since last touch move
var delta = event.current.clientY - event.previous.clientY;
var ret;
var interpreter = interpreters.top();
if (is_function(interpreter.touchscroll)) {
ret = interpreter.touchscroll(event, delta, self);
} else if (is_function(settings.touchscroll)) {
ret = settings.touchscroll(event, delta, self);
}
if (ret === true) {
return;
}
return false;
});
// make_callback_plugin is helper that use $.Callbacks and make sure that there is only
// one handler on the element
$.fn.touch_scroll …
Run Code Online (Sandbox Code Playgroud) touch-event ×10
android ×7
flutter ×2
javascript ×2
android-4.0-ice-cream-sandwich ×1
gesture ×1
hover ×1
java ×1
jquery ×1
mobile ×1
scroll ×1
touchstart ×1
viewgroup ×1
web ×1