我有一个应用程序可以覆盖 的onTouchEvent(MotionEvent ev)来MainActivity确定Two-Finger-Swipe和Pich-Open/ Pinch-Close。一切正常,直到我将其添加到应用程序中(就像创建导航抽屉DrawerLayout中所述)。问题:阻止在 MainActivity 中调用。DrawerLayoutonTouchEvent()
我开始编写CustomDrawerLayout, 并尝试重写DrawerLayout方法onInterceptTouch()和onTouchEvent()。
TouchEvent(我发现)将其传输到 MainActivity 的唯一方法:
// onTouchEvent of CustomDrawerLayout
@Override
public boolean onTouchEvent(MotionEvent ev){
// super.onTouchEvent(ev); // prevent transmission of TouchEvent
return false;
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是抽屉无法正确打开。抽屉卡住了,如这篇文章中所述: DrawerLayout getting 卡在 swipe 上。
是否可以将 传输TouchEvent到 MainActivity 来处理 MultiTouchDetection?或者我必须处理这个问题CustomDrawerLayout?
更新1
首先,我不得不说,如果我从左边缘滑动,抽屉只会卡住。通过单击ActionBar抽屉中的抽屉图标,效果很好。TouchEvent使用以下代码传输作品。但前提是抽屉打开了!否则Activity.onTouchEvent不叫!
// onTouchEvent of …Run Code Online (Sandbox Code Playgroud) 目前以下是我的应用程序的布局:
LinearLayout
----Button
----ScrollView
----RelativeLayout
----EditText
Run Code Online (Sandbox Code Playgroud)
我在所有这些之上创建了一个透明的 LinearLayout,实现了 OnTouchListener 并在 OnTouch() 内部,返回 false。因此,所有控件都移动到子级下方。但是在 LinearLayout 上,我无法处理 ACTION_MOVE 操作,因为此布局不消耗 MotionEvent 对象。有什么方法可以检测父视图和子视图中的所有触摸事件吗?
我遇到了画布未在平板电脑上注册 mousedown 事件的问题,我已经尝试了一段时间但没有任何效果,甚至在代码中将 mousedown 更改为 touchstart,实现 Hammer.js、jquery mobile,任何帮助将不胜感激,一切都可以在桌面上运行,只是不需要触摸手势
var gestures = function(config){
var conf = {
debug: true,
draw: true,
drawColor: "##f8f07e",
drawWidth: 5,
autoTrack: true,
allowRotation: true,
inverseShape: true,
points: 33
};
var d;
var ctx;
var tracking = false;
var ob = this;
this.gestures = [];
this.points = [];
this.construct = function(){
d = doc_size();
//copying configuration
for(var opt in config){
conf[opt] = config[opt];
}
if(document.getElementById("gestures_canvas"))
{
ctx = document.getElementById("gestures_canvas").getContext("2d");
}
else if(conf.draw)
{
//create canvas for drawing …Run Code Online (Sandbox Code Playgroud) 是否可以使 EditText 可编辑但不可选择?我希望能够编辑一些文本,然后将其拖动到页面上。它可以工作,但是当您拖动它时,这会被视为长按,因此它会选择一些文本。
我是否必须做一些事情,比如当我单击 EditText 时显示另一个视图,让其捕获触摸事件,然后在事件操作启动时将其隐藏并将焦点返回到 editText?这看起来很古怪/过于复杂。
我需要执行以下操作
我已经用onmousedown、onmouseenter和很好地实现了这一点,并在我处理最后一步的文档中onmouseleave添加了。onmouseup
问题是,我需要它在移动设备上工作。我已经成功地用,div组合实现了拖动,而且很简单。现在我尝试实现上述行为,但我发现,touchstarttouchmove
touchenter或touchleave事件,并且touchmove显然只有在目标已经发生touchstart事件时才会触发。令人沮丧的是,没有无缝的方法可以做到这一点,我确实知道触摸设备与鼠标不同,但我认为应该对待一些常见的行为没有太大区别,并且只区别对待每个设备的特殊事物有。
如果有办法做到这一点,我真的会很感激,因为我非常厌倦阅读文档和尝试看似解决问题但实际上没有解决的事情。
请注意,这个网格不是静态的,也不是直接使用 HTML 创建的,它是从文件中提取并使用不同的程序生成的,它只是一个<table>.
我正在开发一个画布 JavaScript,通过 mousemove 事件你可以擦除背景......
现在我正在尝试在触摸屏(移动设备)上获得相同的体验。如何同时为我的代码提供 mousemove 和 touchmove 事件?
(function() {
// Creates a new canvas element and appends it as a child
// to the parent element, and returns the reference to
// the newly created canvas element
function createCanvas(parent, width, height) {
var canvas = {};
canvas.node = document.createElement('canvas');
canvas.context = canvas.node.getContext('2d');
canvas.node.width = width || 100;
canvas.node.height = height || 100;
parent.appendChild(canvas.node);
return canvas;
}
function init(container, width, height, fillColor) {
var canvas = createCanvas(container, width, height); …Run Code Online (Sandbox Code Playgroud)前段时间,我在移动设备上的网络浏览器中进行拖放操作时遇到了困难。默认的 JavaScript 事件在移动设备上不起作用。您只能使用触摸事件。
就我而言,我需要通过拖放来交换两个图像以及 ID。这里有一个例子:
div{
display:inline-block;
border:1px solid #0b79d0;
}
div, img{
width:120px;
height:120px;
}Run Code Online (Sandbox Code Playgroud)
<div id="1" ondragover="allowDrop(event)" ondrop="drop(event)" ondragenter="dragEnter(event)" ondragleave="dragLeave(event)" draggable="false">
<img id="a" draggable="true" ondragstart="dragStart(event)" src="https://static.webshopapp.com/shops/073933/files/156288269/345x345x1/artibalta-white-tiger.jpg"/>
</div>
<div id="2" ondragover="allowDrop(event)" ondrop="drop(event)" ondragenter="dragEnter(event)" ondragleave="dragLeave(event)" draggable="false">
<img id="b" draggable="true" ondragstart="dragStart(event)" src="https://yt3.ggpht.com/a-/AN66SAyfsmao4f1EEOqkBP2PgpSUcabPJXLZ1sLEnA=s288-mo-c-c0xffffffff-rj-k-no"/>
</div>
<div id="3" ondragover="allowDrop(event)" ondrop="drop(event)" ondragenter="dragEnter(event)" ondragleave="dragLeave(event)" draggable="false">
<img id="c" draggable="true" ondragstart="dragStart(event)" src="https://kinderbilder.download/wp-content/uploads/2018/10/animals-for-dolphin-drawings-pencil-drawings-pinterest-verwandt-mit-delfine-zeichnen-100x100.jpg"/>
</div>
<script>
function allowDrop(ev){
ev.preventDefault();
}
function dragEnter(ev){
var element = document.getElementById(ev.target.id);
element.style.border = "dotted";
element.style.borderColor = "#0b79d0";
}
function dragLeave(ev){
var element = document.getElementById(ev.target.id);
element.style.border …Run Code Online (Sandbox Code Playgroud)如何在 React Native 中模拟触摸事件?
基本上我有 onPress 事件的 X 和 Y 坐标,并且想在同一位置再次触发触摸事件。
这在 JavaScript 中是可行的
document.elementFromPoint(x, y).click();
Run Code Online (Sandbox Code Playgroud)
但在RN可行吗?
我可以通过事件开始长按touchstart。touchend但是,长按完成后、出现右键菜单或关闭右键菜单时,它不会触发。
如何检测长按何时完成?
这是我在视图中定义事件的位置:
events : {
"tap #exerciseProgressBarContainer" : 'progressBarClick'
},
Run Code Online (Sandbox Code Playgroud)
这是行动:
progressBarClick : function() {
// start?
if(this.curWorkoutExercise.isTimed() && !this.curExerciseStartTime) {
HTMLHelper.endGlow(this.$('#exerciseProgressBarContainer .progressBar.overlay'));
this.startExerciseProgressTimer();
}
// done?
else {
this.stopExerciseProgressTimer();
// save the log
this.addCurExerciseLog();
this.startBreak();
this.nextAction();
}
},
Run Code Online (Sandbox Code Playgroud)
基本上,在第一次点击时,用户启动进度计时器,并在其启动后,另一次点击完成它.在我的iPhone和我的Android上发生的事情是点击事件触发两次,同时启动和停止进度条.任何想法为什么会发生这种情况以及如何解决它?注意:我已经尝试过交换tap了vclick.
非常感谢!
touch-event ×10
javascript ×6
android ×3
mouseevent ×3
jquery ×2
backbone.js ×1
canvas ×1
drawerlayout ×1
html ×1
long-press ×1
mobile ×1
react-native ×1
reactjs ×1
selectable ×1
web-frontend ×1