Articles of ontouchevent

通过父级捕获onTouch事件,处理它并传递给子级

我试图理解Android如何处理触摸事件并且有点困惑。 根据我的理解,触摸事件被发送到根视图并传递给孩子们。 我有一个FrameLayout ,它是Fragment的容器。 第一个片段视图是ScrollView ,第二个是某种Gallery (Horizo​​ntalListView),最后一个也是FrameLayout 。 每次布局中只有一个片段。 我想要做的是识别屏幕上的用户滑动,以供应用程序使用。 我想计算滑动并在经过一些滑动后做一些事情。 我试图将OnTouchListener放在顶部的FrameLayout但是当孩子是ScrollView或Gallery时它不会被调用。 我试图在onTouch的最后返回false和true ,但是我得到了相同的结果 – 它永远不会被调用。 我该怎么做? 我只是想“透明地”处理触摸事件并传递它们,就像我甚至没有触摸它们一样。

在扩展/缩小或在android中拖动后获取canvas坐标

我正在开发一个应用程序,我在其中粘贴图像,在canvas上绘图和绘画。 此应用程序还可以向上/向下缩放canvas或将其拖动到不同的位置。 我的问题是:在缩放或拖animation布后,我无法获得正确的canvas坐标。 我想在缩放或拖animation布后绘制手指画,但无法find我触摸的正确位置.. :(我也是新的蜜蜂。这是代码。 @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 […]

关闭onTouchOutside上的DialogFragment(不是Dialog)

我已经搜索了有关解除对话onTouchOutside的所有答案,但是,我在我的应用程序中使用DialogFragment 。 当用户在DialogFragment区域外单击时,如何解除DialogFragment 。 我已经检查了Dialog的setCanceledOnTouchOutside的源代码 public void setCanceledOnTouchOutside(boolean cancel) { if (cancel && !mCancelable) { mCancelable = true; } mCanceledOnTouchOutside = cancel; } 还有另一个可能有趣的function是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) […]

Android – 如何圆形缩放/放大部分图像?

我试图让用户触摸图像,然后基本上一个圆形放大镜将显示将允许用户更好地选择图像上的某个区域。 当用户释放触摸时,放大的部分将消失。 这用于几个照片编辑应用程序,我正在尝试实现我自己的版本。 我下面的代码确实放大了图像视图的圆形部分,但是一旦我松开手指就不会删除或清除缩放。 我目前使用canvas = new Canvas(bitMap);将一个位图设置为canvascanvas = new Canvas(bitMap); 然后使用takenPhoto.setImageBitmap(bitMap);设置imageview takenPhoto.setImageBitmap(bitMap); 我不确定我是否正确地采取行动。 onTouch代码如下: zoomPos = new PointF(0,0); takenPhoto.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: zoomPos.x = event.getX(); zoomPos.y = event.getY(); matrix.reset(); matrix.postScale(2f, 2f, zoomPos.x, zoomPos.y); shader.setLocalMatrix(matrix); canvas.drawCircle(zoomPos.x, zoomPos.y, 20, shaderPaint); […]

View.onTouchEvent仅注册ACTION_DOWN事件

我正在实现一个自定义TextView ,我想在触摸视图时执行一些操作。 我认为onTouchEvent方法可以在视图中为我提供全方位的触摸,而无需使用setOnTouchListener (我正在尝试在视图中而不是在活动中完成所有工作,因此它是可移植的),但是唯一的触摸事件已注册是ACTION_DOWN 。 如果我使用OnTouchListener在活动中设置OnTouchListener ,我会获得全部触摸事件,但onTouchEvent却没有。 任何人都知道为什么会这样,或者任何人都可以提供一个不涉及使用setOnTouchListener的解决方案(这会阻止实现活动设置自己的监听器)?

无法在Android设备上获取Javascript中的touchevents坐标

我正在测试HTML5canvas并使用Javascript来绘制支持触控的设备。 虽然我在iOS设备上工作但我无法在Android上使用它。 我把它缩小到event.pageX没有返回坐标,而是返回0或未定义(基于浏览器)。 我在Opera Mobile和Dolphin浏览器上运行Cyanogen 7.1的手机上测试了它,并在运行标准浏览器的Galaxy Tab 10.1(Android 3.1)上进行了测试。 我修改了代码,在显示event.pageX,event.layerX和event.clientX坐标的touchstart事件上显示警报(我知道clientX应该只适用于iOS)。 canvas.addEventListener(‘touchstart’, function(e) { if (readyToDraw){ alert(“PageX: “+e.pageX+”,”+e.pageY+”\n LayerX: “+e.layerX+”,”+e.layerY+”\n + clientX: “+e.clientX+”,”+e.clientY); // prevent the browsers default action! e.preventDefault(); paint = true; // Get coordinates var c = getCoords(e); addClick(cx, cy, false); } }); 我已经在iOS中使用完整的绘图,但甚至无法让Android注册坐标,任何想法? 最终编辑:我解决了这个问题,看到了接受的答案。

处理拦截触摸事件而不扩展ViewGroup

我有一个RelativeLayout ,这个布局有近10个视图。 我已将OnTouchListener设置为此布局并在其中执行一些工作并返回true 。 当我触摸没有View的布局(空区域的意思)时,这个监听器工作正常。 如果我触摸此布局的子视图,则此侦听器不会触发… 从文档中,我了解到我们可以通过扩展ViewGroup(所以这里是RelativeLayout)覆盖onInterceptTouchEvent() )并在子视图消耗此事件之前处理触摸事件… 这将做一个技巧,但我需要通过将RelativeLayout替换为CustomRelativeLayout来修改我需要此function的许多xml文件。 所以我的问题是: 有没有办法在RelativeLayout子视图消耗事件之前处理RelativeLayout (ofcourse ViewGroup)的触摸事件? 我不想扩展RelativeLayout ……

动态生成的线条,有效发光

我想用这样的发光效果绘制线条 问题 – 我必须根据用户的交互在程序中生成这一行(行的forms将在onTouchEvent – ACTION_MOVE生成)。 我可以在没有xml文件或绘制预制位图的情况下生成此效果吗?

方法onTouchEvent未被调用

我遇到了问题,我的方法 @Override public boolean onTouchEvent(MotionEvent event) { return gestureDetector.onTouchEvent(event); } 是新的叫。 任何想法为什么会这样? 我正在构建一个google的api 4.0.3应用程序,我正在尝试为我的viewFliper启用滑动。 但是,如果触摸更新,它就无法工作。 BTW: public class MainActivity extends SherlockMapActivity implements ActionBar.TabListener { 那是我活动的宣言。 并检测我实施的滑动: SimpleOnGestureListener simpleOnGestureListener = new SimpleOnGestureListener(){ @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { float sensitvity = 50; if((e1.getX() – e2.getX()) > sensitvity){ SwipeLeft(); }else if((e2.getX() – […]

Android onTouchEvent坐标跳过

我的应用程序,我有一个要求用户在屏幕上移动它的元素,并执行此操作我使用RelativeLayout和onTouchListener。 我遇到的问题是在我的onTouchListener里面, getX()和getY()得到了一些奇怪的结果。 我将下面这行代码添加到我的onTouch() – > ACTION_MOVE块中: Log.v("example", "Touch: {x:" + event.getX() + " } {y:" + event.getY() + "}"); 以下是我的LogCat结果。 04-29 03:16:11.000:V / myApp(24188):触摸! 04-29 03:16:11.057:V / myApp(24188):Touch:{x:69.78699} {y:107.774216} 04-29 03:16:11.103:V / myApp(24188):Touch:{x:77.86926} {y:173.37648} 04-29 03:16:11.158:V / myApp(24188):Touch:{x:69.78699} {y:108.781845} 04-29 03:16:11.205:V / myApp(24188):Touch:{x:77.86926} {y:174.38597} 04-29 03:16:11.463:V / myApp(24188):Touch:{x:69.78699} {y:109.64778} 04-29 03:16:11.502:V / myApp(24188):Touch:{x:77.86926} {y:175.62172} […]