我正在开发一个应用程序,其中我粘贴图像,在画布上绘图和绘画.此应用程序还可以向上/向下缩放画布或将其拖动到不同的位置.我的问题是:在缩放或拖动画布后,我无法获得正确的画布坐标.我想在缩放或拖动画布后绘制手指画,但无法找到我触摸的正确位置.. :(我也是新的蜜蜂.这是代码.
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
//canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor, super.getWidth() * 0.5f,
super.getHeight() * 0.5f);
mIcon.draw(canvas);
for (Path path : listPath) {
canvas.drawPath(path, paint);
}
canvas.restore();
}
public TouchExampleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
// Let the ScaleGestureDetector inspect all events.
mScaleDetector.onTouchEvent(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = …Run Code Online (Sandbox Code Playgroud) 我正在开发用户需要按住按钮很长时间的应用程序.
如何检测用户的时刻:完成印刷或移动触摸位置?
谢谢
我试图了解Android如何处理触摸事件并且有点困惑.根据我的理解,触摸事件被发送到根视图并传递给孩子们.我有一个FrameLayout容器Fragment.第一个片段视图是a ScrollView,第二个是某种Gallery(HorizontalListView),最后一个也是FrameLayout.每次布局中只有一个片段.我想要做的是识别屏幕上的用户滑动,以供应用程序使用.我想计算滑动并在经过一些滑动后做一些事情.
我试图把一个OnTouchListener放在顶部FrameLayout,但当孩子是ScrollView或那个时它不会被调用Gallery.我试图返回false,也在true最后onTouch,但我得到相同的结果 - 它永远不会被调用.
我该怎么做?我只是想"透明地"处理触摸事件并传递它们,就像我甚至没有触摸它们一样.
我使用了Google和本教程中的指南来制作我自己的上下文操作栏.
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.annotation_menu, menu);
return true;
}
// Called each time the action mode is shown.
// Always called after onCreateActionMode, but
// may be called multiple times if the mode is invalidated.
@Override
public boolean onPrepareActionMode(ActionMode mode, …Run Code Online (Sandbox Code Playgroud) 如果有人触及预先声明的话UILabel,我想做一个动作,例如:
if (label is touched) {
my actions;
}
Run Code Online (Sandbox Code Playgroud)
有方法/方法吗?
我已经搜索了有关解除对话onTouchOutside的所有答案,但是,我在我的应用程序中使用了DialogFragment.当用户在DialogFragment区域外单击时,如何解除DialogFragment.
我已经检查对话框的源代码为setCanceledOnTouchOutside
public void setCanceledOnTouchOutside(boolean cancel) {
if (cancel && !mCancelable) {
mCancelable = true;
}
mCanceledOnTouchOutside = cancel;
}
Run Code Online (Sandbox Code Playgroud)
还有另一个可能有趣的功能是isOutOfBounds
private boolean isOutOfBounds(MotionEvent event) {
final int x = (int) event.getX();
final int y = (int) event.getY();
final int slop = ViewConfiguration.get(mContext).getScaledWindowTouchSlop();
final View decorView = getWindow().getDecorView();
return (x < -slop) || (y < -slop)
|| (x > (decorView.getWidth()+slop))
|| (y > (decorView.getHeight()+slop));
}
Run Code Online (Sandbox Code Playgroud)
但我无法找到一种方法来使用这些用于 …
android dialog touch-event android-fragments android-dialogfragment
是否可以模拟连接到Android的USB或蓝牙设备?
我想创建一个能够在本地模拟HID设备的应用程序.我的意思是:该应用程序应该让Android相信USB /蓝牙HID设备已连接.我希望这可以让我的应用程序在全球范围内注入触摸事件.无论如何都要模拟(虚拟)设备?请注意,我并不关心设备,我只想使用内置的HID输入支持.
我知道很多人已经问过触摸事件注入,但这种方法似乎有点不同.我也没有想用这个测试的目的,因此InstrumentationTestCase之类也无济于事.
植入设备可能是一个选项,虽然我也可以设想让我的最终用户手动安装一个专门签名的应用程序(根据/sf/answers/1171595841/和/sf/answers/1603196591/这有效,但它将是特定于设备的).
我知道:
在android上模拟一个鼠标输入 - 这个人似乎是在他自己的应用程序中做到这一点,虽然他的问题没有得到解答;)
http://www.pocketmagic.net/2013/01/programmatically-injecting-events-on-android-part-2/#.U58SqfldVHV -需要root.有没有人成功使用过这个?此外,该解决方案似乎再次特定于设备.
蓝牙+模拟鼠标 - 这不是我想要的.手机本身不应该是HID设备,而是使用(虚拟创建的)设备.同样如下:https: //stackoverflow.com/a/8174973/2923406
请注意,我不希望把我的手机到任何种类的HID设备.
问题
我试图模拟Google Play应用程序的确切行为.
目前,当您滚动浏览类似"热门游戏"的类别并触摸列表,该单元格以及RecyclerView处理触摸事件时,您可以告诉他们正在处理它,因为当您按下手指时出现波纹以及滚动停止.或者,如果您在列表仍在移动时单击一个单元格,则会立即打开该内容.
默认行为是滚动在您移动时将手指放下时立即停止,然后消耗该触摸事件,这意味着细胞永远不会被告知该触摸.当您的应用程序主要内容位于a中时,这非常令人恼火RecyclerView,如果用户不断滚动然后单击一个单元格,则需要它们单击两次,因为通过停止滚动消耗了第一次单击,即使列表很少移动.
我到目前为止所做的一切
起初我以为必须有一些标志,RecyclerView它告诉它不要消耗触摸事件.我查看了Android源代码并通过Android文档路由无济于事.
然后我尝试捕捉触摸事件onInterceptTouchEvent并手动告诉我的视图它被触摸;
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
View myCell = recyclerView.findChildViewUnder(event.getX(), event.getY());
myCell.dispatchTouchEvent(event);
return super.onInterceptTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
在这里, dispatchTouchEvent似乎没有做任何事情,即使我得到的视图有我在适配器中设置的相应标签.
我试过用我的编码机枪在各个角度拍摄这个问题; 玩requestDisallowInterceptTouchEvent,手动调用onTouch和覆盖所有方式的听众RecyclerView.
似乎没有什么工作.我确信必须有一个优雅的解决方案,我已经在精神错乱的道路上的某个地方浏览了一个重要的细节?特别是因为谷歌自己的应用程序以这种方式运行.
请帮忙!:) 谢谢.
解决方案
感谢Jagoan Neon已找到解决方案.我最终将他的答案包含在一个习惯中,RecyclerView以方便使用.
public class MultiClickRecyclerView extends RecyclerView {
public MultiClickRecyclerView(Context context) {
super(context);
}
public MultiClickRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MultiClickRecyclerView(Context context, AttributeSet attrs, int defStyle) {
super(context, …Run Code Online (Sandbox Code Playgroud) 由于大多数桌面浏览器尚不支持touchstart/touchend.如何创建与mousedown事件相同的touchstart事件(所有浏览器都支持).
我想要这样的东西
$('obj').bind('touchstart', function(e){
});
Run Code Online (Sandbox Code Playgroud)
将被翻译成
$('obj').bind('mousedown', function(e){
})
Run Code Online (Sandbox Code Playgroud) touch-event ×10
android ×8
click ×1
cocoa-touch ×1
dialog ×1
hid ×1
ios ×1
jquery ×1
objective-c ×1
position ×1
scaling ×1
touch ×1
uilabel ×1
webview ×1