我有一个MKMapViewViewController,并希望在他/她用这些方法触摸地图时检测用户的手势:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
Run Code Online (Sandbox Code Playgroud)
该应用程序适用于iOS 3,iOS 4,但当我在iOS 5上运行iPhone调试应用程序时,我看到此消息:
Pre-iOS 5.0 touch delivery method forwarding relied upon. Forwarding -touchesCancelled:withEvent: to <MKAnnotationContainerView: 0x634790; frame = (0 0; 262144 262144); autoresizesSubviews = NO; layer = <CALayer: 0x634710>>
Run Code Online (Sandbox Code Playgroud)
并且未达到上述4种方法中的代码.
你知道怎么解决吗?
谢谢.
我有一个顶级ViewGroup,我称它为SliderView,我想在其中检测滑动。这通常可以正常工作,但是一个奇怪的失败仍然存在。
SliderView的本质是重写onInterceptTouchEvent,并且在用户实际滑动后,返回“ true”以防止其他视图占用MotionEvent。这是一段代码:
public class SliderView extends ViewGroup
{
enum MoveState { MS_NONE, MS_HSCROLL, MS_VSCROLL };
private MoveState moveState = MoveState.MS_NONE;
... other code ...
public boolean onInterceptTouchEvent(MotionEvent e)
{
final int action = e.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
moveState = MoveState.MS_NONE;
break;
case MotionEvent.ACTION_MOVE:
if (moveState == MoveState.MS_NONE)
{
if (motion is horizontal)
{
moveState = MoveState.MS_VSCROLL;
return true;
}
else
moveState = MoveState.MS_VSCROLL; // let child window handl MotionEvent
}
else if (moveState == MoveState.MS_HSCROLL) …Run Code Online (Sandbox Code Playgroud) android scrollview touch-event android-linearlayout motionevent
我正在使用手指画画线,到目前为止,我已经提出以下代码:
case MotionEvent.ACTION_MOVE:
//return if touch is in this area of canvas
if (x<=430 || y<=80 || y>=490) return true;
//draw path using x and y co-ordinates
mPath.quadTo(previousPoint.x, previousPoint.y, (x+previousPoint.x)/2,(y+previousPoint.y)/2);
canvas.drawPath(mPath, paint);
previousPoint.x = x;
previousPoint.y = y;
//invalidate canvas on move
imageView.invalidate();
break;
case MotionEvent.ACTION_UP:
Xend=x;
Yend=y;
//validate that is it true?
if((Xstart>=780 && Xstart<=830) && (Xend>=780 && Xend<=830) && (Ystart>=10 && Ystart<=200) && Yend<=800 && Yend>=300){
//show toast if correct
Toast.makeText(getBaseContext(), "Correct", Toast.LENGTH_SHORT).show();
}else{
//show toast with XY …Run Code Online (Sandbox Code Playgroud) 找到两个解决方案 - 请参阅选定的答案
当用户点击EditText的某个区域时,我想弹出一个对话框.我使用onClick来捕获点击.这部分工作:用户第一次点击EditText时,弹出软键盘而对话框不弹出.随后的点击会弹出键盘,然后是对话框(键盘会消失).
我怀疑这与EditText获得关注有关.
这是一个代码片段:
public class PrefixEditText extends EditText implements TextWatcher, OnClickListener
{
public PrefixEditText (Context context)
{
super (context);
setOnClickListener (this);
}
@Override
public void onClick(View v)
{
int selStart = getSelectionStart();
if (selStart < some_particular_pos)
bring_up_dialog();
}
}
Run Code Online (Sandbox Code Playgroud)
重要说明:我不想完全禁用正常的EditText行为.我希望用户能够进行区域选择(用于复制和粘贴).我可能仍然希望它获得焦点(因此当具有物理键盘的人使用该应用程序时,我不打破模型).点击可以设置光标位置.因此,覆盖onTouch并阻止EditText中所有onTouch操作的解决方案对我来说不起作用.
更新 我发现了一点.如果EditText正在获得焦点,则会调用onFocusChange而onClick不会.如果它已经有焦点,则onClick被调用而onFocusChange没有.
其次,可以通过调用隐藏键盘
setInputType (InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)
在onFocusChange中这样做 - 键盘永远不会出现.在onClick中这样做(假设键盘在点击之前被隐藏)显然为时已晚 - 键盘显示然后消失.
下一个尝试的想法是在onTouch期间隐藏键盘.但是,我害怕弄乱那些代码 - 似乎无论我想出什么都会对EditText的未来版本非常脆弱.
对此有何看法?
我有一些RelativeLayout动态使用代码添加和删除的片段.其中一个片段是a ListFragment,并且与其他具有Close和Save Buttons的片段相反,这个片段只包含一个列表.
我的目标是通过在活动中的任何位置单击它以外来关闭/删除此片段.
我找到了以下代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
// I only care if the event is an UP action
if (event.getAction() == MotionEvent.ACTION_UP) {
// create a rect for storing the window rect
Rect r = new Rect(0, 0, 0, 0);
// retrieve the windows rect
this.getWindow().getDecorView().getHitRect(r);
// check if the event position is inside the window rect
boolean intersects = r.contains((int) event.getX(), (int) event.getY());
// if the event is not inside then we …Run Code Online (Sandbox Code Playgroud) 在Objective-C上,当动画在UIView上开始时,不接受任何触摸交互.我们怎么办呢?
我一直在开发一个HTML5应用程序,现在我面临一个相当困难的问题,在适当的坐标系中在目标div内获得适当的局部触摸/鼠标位置.
StackOverflow上有很多解决方案,但事情并不那么容易.
"经典"解决方案是计算目标偏移量并从pageX和pageY位置减去它.许多人使用JQuery offset函数,但在页面滚动并包含嵌套的缩放div时,我们在iOS上发现它有bug(1.8.3).
情况更复杂,因为不仅有嵌套的缩放div(CSS zoom属性),还有不同CSS转换(x和y转换)的图层.
最后,我们已经写我们自己的函数来计算在目标div的,本地的鼠标/触摸位置(使用WebKitCSSMatrix,MSCSSMatrix等...).它的工作"几乎"很好,但在某些情况下仍然不完美 - 特别是当有嵌套的缩放div时.
所以我的问题是,考虑到上述要求,是否有一些通用的解决方案/库来计算目标div内的局部触摸/鼠标位置?
谢谢.
所有人都过得愉快...
我有一个容器ViewGroup,可以把它的屏幕内ScrollView.这个容器视图托管了许多其他Views的调用它们的小部件,其中一些有兴趣阻止ScrollView滚动并使用MotionEvent自己(例如一个pannable图像)
我无法弄清楚要使用的正确的事件拦截策略.ScrollView始终在子项之前处理事件,或者子项处理事件但是scrollview已禁用.
我读过关于getParent().requestDisableInterceptTouchEvent()在子视图中发出这个视图是否想要捕获事件,但是onTouchEvent没有调用它们,我想是因为ScrollView事先已经吞没了事件.我想我有2级层(容器+小部件)的事实阻止了它的工作,我想容器ViewGroup必须在这里发挥重要作用,但我无法弄清楚哪一个......
我是否可以在ScrollView's onInterceptTouchEvent级别上知道容器上的哪个小部件viewGroup被触摸以决定是否应该拦截?
要么...
如何才能获得事件中的"小部件"图层,ViewGroupScrollView以便我可以调用getParent().onRequestDisableInterceptTouch() ......或者是它getParent().getParent().onRequestDisableInterceptTouch()?
提前致谢
我已阅读相关问题,但没有运气...... 在ScrollView Android中处理触摸事件
我希望能够在屏幕上的任何位置滑动以调用某个功能.但我也有Buttons,Linear Layouts因为我希望能够点击.如果我刷上Button我想 onInterceptTouchEvent给Intercept在调用Button的onTouchEvent和进行刷卡操作.如果我只是点击一个Button我不希望onInterceptTouchEvent被调用.相反,我希望Button的onTouchEvent要调用和执行Button click
但是当我尝试实现时,我会遇到错误onInterceptTouchEvent.
这是我的代码:
public class Game extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
//other code....
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
swipeScreen(); //if action recognized as swipe then swipe
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX();
float …Run Code Online (Sandbox Code Playgroud) 如果您切换放置在上方的元素的高度,则触摸设备上有关于链接的可点击区域的奇怪行为.如果您运行以下代码段(例如,将其保存在本地并使用chrome来模拟触摸事件),您会注意到#mylink在某些情况下您没有点击红色链接区域的哈希值会被添加到网址中.有时你点击红色区域,它不会被添加.
例如
#mylink则会将其添加到URL中,就像您单击红色链接区域一样.=>为什么?#mylink则不会添加到URL.=>为什么?#mylink则不会添加到URL.=>为什么?<html>
<head>
<style type="text/css">
.test {
background: grey;
height: 200px;
}
.test.is-visible {
height: 400px;
}
.link {
height: 600px;
display: block;
background: red;
}
</style>
<script type="text/javascript">
(function() {
window.addEventListener( 'touchstart' , function() {
document.getElementsByClassName("test")[0].classList.toggle('is-visible');
});
})();
</script>
</head>
<body>
<div class="test">
Click the grey area. Element enhances and minimizes itself. Now click on the lower half of the enhanced grey area (if …Run Code Online (Sandbox Code Playgroud)touch-event ×10
android ×6
touch ×4
ios ×2
javascript ×2
objective-c ×2
onclick ×2
scrollview ×2
canvas ×1
css ×1
html ×1
iphone ×1
mkmapview ×1
motionevent ×1
mouseevent ×1
position ×1
uianimation ×1