Articles of ontouchlistener

整个屏幕的onTouchListener

我有一个充满按钮的屏幕,但希望onTouch方法使用整个屏幕的坐标。 我首先尝试将RelativeLayout与onTouchListener一起使用,但从未设法使其与侦听器“连接”(即触摸屏幕时没有发生任何事情),我也尝试将ImageView放在屏幕顶部,然后使此视图不可见。 最后一种方法对onClicks给出了正确的响应,但我从未设法让它变得不可见。 如果这是最好的解决方案,我非常怀疑,如何使ImageView完全不可见,而不会丢失其onTouchListener(我已经尝试了白色backgroundColor和setAlpha(0))。 我可以以某种方式使onTouchListener使用全局坐标对整个屏幕作出反应,同时屏幕显示(并改变)几个按钮(最好没有不可见的imageview)? 如果你不明白我的要求,请随时抱怨。 我会尽力填补空白。 编辑: 我现在设法通过使用常规onTouch方法解决问题。 我遇到了几个问题,让ACTION_DOWN和ACTION_MOVE激活按钮,但我终于让它工作了。 对于阅读此内容的其他人:可能会使用onInterceptTouchEvent(但我从未弄清楚如何获取屏幕坐标而不是视图坐标)。

除非先选择视图,否则requestDisallowInterceptTouchEvent不起作用

根据android文档,您可以获取您的父ViewGroup并在其上调用requestDisallowInterceptTouchEvent(true)以阻止其他事情干扰。 这不仅导致直接父级,而且可能拦截触摸的任何其他父对象在特定事件的持续时间内忽略它… 这听起来很棒,似乎在较新的设备(我的是Android 4.1)上工作正常但是较旧的设备(即2.3.3)它不起作用,除非我先点击我的滚动视图然后滚动它,否则其他父可滚动视图仍然可能干扰。 我在View.OnTouchListener中为可滚动子项发送请求。 知道如何自动完成这项工作而不需要编写自定义子类来检查运动事件中的命中矩形等吗?

Android ACTION_MOVE阈值

我正在编写一个应用程序,涉及使用一个手指在屏幕上书写,或最终使用手写笔。 我有那部分工作。 在ACTION_DOWN上,开始绘图; 在ACTION_MOVE上,添加线段; 在ACTION_UP上,完成一行。 问题是在ACTION_DOWN之后,显然指针需要移动距离它开始的位置超过10个像素(基本上是起始点周围的20×20框)才能开始发送ACTION_MOVE事件。 离开盒子后,移动事件都非常准确。 (我通过测试得出10像素的东西。)因为这是用于书写或绘图,10像素是一个相当大的损失:取决于你试图写的小,你可能会失去第一个字母或两个。 我还没有find任何关于它的信息 – 只有一两个论坛上的post,比如http://android.modaco.com/topic/339694-touch-input-problem-not-detecting-very-small -movements / page_ pid _1701028#entry1701028 。 它似乎出现在某些设备或系统上,而不是其他设备或系统上。 但是,当你拥有它时,没有关于如何摆脱它的想法。 我正在使用带有Android 3.1的Galaxy Tab 10.1。 我尝试了几种不同的东西来试图摆脱它:我已经尝试将事件的坐标设置为其他东西,看看我是否可以欺骗它以为光标位于不同的位置; 我尝试用更改的coords重新调度事件(我的处理程序对新点做出反应,但仍然没有响应10像素半径的移动。)我在源代码中搜索了对该效果的任何引用,并且没有find(虽然我认为它来自不同版本的Android – 3.1的代码尚未发布,是吗?)我已经搜索了查询指针当前状态的方法,所以我可以只有一个计时器捕获更改,直到指针超过阈值。 没有相应的移动事件,找不到任何获得指针坐标的方法。 没有任何效果。 有没有人知道这件事,或有任何想法或解决方法? 谢谢。 – 更新:拖放事件显示相同的阈值。

在使用recyclerView填充的cardView中添加clickListner for按钮

我有一个cardView card_contents.xml 它使用回收者视图: public class MainActivity extends ActionBarActivity { RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); List list=new ArrayList(); list.add(“Hello”); list.add(“Hello World”); list.add(“Hello World Beings”); recyclerView=(RecyclerView)findViewById(R.id.recycler_view); recyclerView.setItemAnimator(new DefaultItemAnimator()); recyclerView.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); RecyclerView.Adapter adapter=new MyAdapter(list); recyclerView.setAdapter(adapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to […]

获取用户触摸的真实x和y坐标

我需要将onTouch事件的X,Y坐标映射到ImageView内的Bitmap X,Y坐标来执行此操作我使用以下方法。 然而,这种方法似乎只有在我要么: a)完全缩放图像(完全放大) b)如果我将我的应用程序全屏显示,则无论如何都适用 final int index = event.getActionIndex(); touchLocation = new float[] { event.getX(index), event.getY(index) }; Matrix matrix = new Matrix(); ImageView view = getImageView(); view.getImageMatrix().invert(matrix); matrix.postTranslate(view.getScrollX(), view.getScrollY()); matrix.mapPoints(touchLocation); // touchLocation[0] is real x and [1] is real y 但是我的活动是一个ActionBar活动,所以我在Y轴上的位置有点错误。 我试着扣除ActionBar和StatusBar的高度,但这并不总是有效。 奇怪的是,在全屏幕上无论我是否完全缩放我的图像都无关紧要我总是得到正确的坐标,但是对于任何其他活动types,这都不会正确地映射点。

Android移动视图触摸事件

我想在我的布局中移动两个不同的视图,以便用户可以像他的愿望一样显示它。 到目前为止,我已经制作了以下代码来处理触摸事件: this.viewEvent.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { final int y = (int) event.getRawY(); RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams(); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: element.setEventY(y – params.topMargin); break; case MotionEvent.ACTION_UP: viewGroup.invalidate(); break; case MotionEvent.ACTION_POINTER_DOWN: case MotionEvent.ACTION_POINTER_UP: break; case MotionEvent.ACTION_MOVE: params.topMargin = y – element.getEventY(); params.bottomMargin = screenHeight – […]

一个View的onTouchListener与onTouchEvent

视图的onTouchEvent有什么区别: public class MyCustomView extends View { // THIS : @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); } } 和它的onTouchListener : MyCustomView myView = (MyCustomView) findViewById(R.id.customview); myView.setOnTouchListener(new View.OnTouchListener() { @Override public void onClick(View arg0) { // do something } }); 要么 public class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { // […]

SwipeListView一次只打开一个项目

这个问题涉及这里find的SwipeListView组件: https : //github.com/47deg/android–swipelistview 在尝试了我在网上find的几个实现和修复后,我决定稍微修改一下这些来源。 我会在这里发布这个,因为我知道这是一个已知的问题,我发现的所有版本最终都certificate了一些问题。 SwipeListViewTouchListener.java遭受了以下更改: … /** * Create reveal animation * * @param view affected view * @param swap If will change state. If “false” returns to the original * position * @param swapRight If swap is true, this parameter tells if movement is toward * right or left * @param position […]

onTouchListener无法正常工作

我的活动中有以下代码。 在我的xml中,video视图位于线性布局中。 但是,单击视图时, onTouchListener永远不会触发。 我尝试将onTouchListener更改为onTouchListener ,但是没有做任何事情。 我也尝试将onTouchListener更改为onTouchListener ,但没有。 任何人都知道为什么听众没有开火? 谢谢。 private VideoView vvLive; LinearLayout linearLayoutLiveVideo; linearLayoutLiveVideo.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event){ Log.d(TAG, “onTouch entered”); if(event.getAction() == MotionEvent.ACTION_UP) { Log.d(TAG, “ACTION_UP”); } return false; } }); 编辑 :我意识到上面的代码实际上是有效的。 日食中的东西弄乱了LogCat。 重新启动eclipse后,LogCat会打印第一个“onTouch输入”日志。 但是,“ACTION_UP”没有打印出来。 我将MotionEvent更改为MotionEvent.ACTION_DOWN并立即打印LogCat。 为什么ACTION_DOWN有效但ACTION_UP没有?

在各种Activity中使用相同的onTouchEvent

我在MainActivity.class使用onTouchEvent 。 它工作正常:如果用户用手指制作双L,我称之为片段。 我想在另一个Activity使用这个onTouchEvent ,但是如果我复制所有代码,我认为它很脏。 为此,我TouchListenerImpl创建了一个工具TouchListenerImpl : class TouchListenerImpl implements View.OnTouchListener { private boolean movingDownL, movingDownR, movingLeft, movingRight, movingSuccessL, movingSuccessR = false; private Point oldCoordsL, oldCoordsR, startPointL, startPointR = new Point(0, 0); private boolean admin_touch = false; private OnLTouch callback; void setCallback(OnLTouch c) { callback = c; } interface OnLTouch { void lTouchSuccess(); } @Override […]