标签: motionevent

使用y坐标确定列表视图中的列表视图项位置

鉴于y坐标通过获得onTouch一个上ListView对象,你怎么能确定已经基于感动项目位置/指数 motionEvent.getY()

onItemClickListener不幸的是我无法使用.

getListView().setOnTouchListener(listViewTouchListener);

View.OnTouchListener listViewTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            Log.d("test", "Y pos: " + motionEvent.getY());
        }
};
Run Code Online (Sandbox Code Playgroud)

android listview ontouchlistener motionevent

2
推荐指数
1
解决办法
1769
查看次数

拦截 MotionEvents 并阻止父级在 ViewPager 中处理它们

我将自定义子视图放入 ViewPager。我在拦截触摸事件方面没有任何重要经验,所以这对我来说都是全新的。

我在 SO 和其他博客上查看了大量与此相关的问题,但到目前为止,没有任何建议的建议对我有太大帮助。

我的自定义视图有两个相互重叠的面板。我需要允许用户在不将这些触摸事件传递给父 ViewPager 的情况下滑动最前面的面板。

我很难理解这一点,因为似乎我的观点onTouchEvent总是被调用,尽管false在我观点的onInterceptTouchEvent. 我的理解在这里可能是错误的,但我的印象是返回false应该意味着我的观点onTouchEvent不应该被调用。

这是我的自定义视图的代码:

package com.example.dm78.viewpagertouchexample;

import android.content.Context;
import android.support.v4.view.GestureDetectorCompat;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyCustomView extends FrameLayout {

    public static final String TAG = MyCustomView.class.getSimpleName();

    private GestureDetectorCompat mGestureDetector;
    private PanelData mPanelData;
    private LinearLayout mFrontPanel;
    private float xAdditive;
    private float mFrontPanelInitialX = Float.NaN;
    private float mDownX = Float.NaN;
    private float frontPanelXSwipeThreshold = …
Run Code Online (Sandbox Code Playgroud)

android touch-event android-viewpager motionevent

2
推荐指数
1
解决办法
5915
查看次数

未检测到我的MotionEvent.ACTION_DOWN

我的问题是检测到所有触摸事件,但没有检测到Action_Down事件。该日志会导致事件1、2而不是0(向下)。

这是我的代码

final ViewPager homeViewPager = (ViewPager)findViewById(R.id.homeViewPager);

    homeViewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch (View v, MotionEvent event){
                Log.i("ViewPager", "event " + event.getAction());
                switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE:
                        Log.i("ViewPager", "ACTION_MOVE");
                        break;
                    case MotionEvent.ACTION_DOWN:
                        Log.i("ViewPager", "ACTION_DOWN");
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.i("ViewPager", "ACTION_UP ");
                        break;
                }
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

android ontouchlistener android-viewpager motionevent

2
推荐指数
1
解决办法
1309
查看次数

使用MotionEvent在视图上同时移动两个位图

我使用以下类(android中的简单2D图形)在视图上创建了两个位图,并徘徊以实现该位图可以独立移动。我正在为此调用motionevent方法。

当前问题,我不明白为什么下面的代码中只有一个对象向右移动。例如,使用此代码,仅“非”位图被移动,我希望两个位图彼此独立地移动。

scenrio:我可以用我的两个手指,每个对象一个,独立移动位图。但我不知道如何实现这一目标。

public class TouchView extends View {

private Drawable cross;
private Rect crossBounds = null;
private Drawable not;
private Rect notBounds = null;

private int x1, y1, x2, y2 ;

boolean flag = true;

private void intialize ()
{ 
    int w1 = cross.getIntrinsicWidth();
    int h1 = cross.getIntrinsicHeight();
     x1 = 100;
    y1 = 100;
    crossBounds = new Rect(x1-w1/2, y1-w1/2, x1+w1/2, y1+h1/2);

    int w = not.getIntrinsicWidth();
    int h = not.getIntrinsicHeight();
     x2 = 300;
    y2 = 300;
    notBounds = new Rect(x2-w/2, …
Run Code Online (Sandbox Code Playgroud)

java android motionevent

1
推荐指数
1
解决办法
576
查看次数

始终调用MotionEvent.Action_UP

这是我的onTouchEvent(MotionEvent事件)的代码:

@Override
public boolean onTouchEvent(MotionEvent event){
    int action = event.getAction();
    int x = Math.round(event.getX());
    int y = Math.round(event.getY());
    //play is an imageView
    int viewLeft = play.getLeft();
    int viewRight = play.getRight();
    int viewTop = play.getTop();
    int viewBottom = play.getBottom();
    boolean onPoint = false;

    switch (action) {
        case MotionEvent.ACTION_DOWN:
            //Checks if the touched area falls within the imageView play
            if ((x >= viewLeft && x <= viewRight) && (y >= viewTop && y <= viewBottom)) {
                onPoint = true;
                play.setImageResource(R.drawable.playyellow);
            }
        case …
Run Code Online (Sandbox Code Playgroud)

android motionevent

1
推荐指数
1
解决办法
649
查看次数

Kotlin for Android 中匿名类的覆盖方法

我的代码是用 Java 编写的,我正在将它重构为 Kotlin。我有这个:

Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar) {
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        dismiss();
        dialog = null;
        setLockedDialog(false);
        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)

我无法使用 Kotlin 编写它。这是我的方法:

dialog = Dialog(this, android.R.style.Theme_Translucent_NoTitleBar) {
    override fun dispatchTouchEvent(ev: MotionEvent) {
        // TODO Implement function
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 Android Studio 向我展示了:

1- Type mismatch. Required: Boolean. Found: Int(下android.R.style.Theme_Translucent_NoTitleBar)。

2-Type mismatch. Required: DialogInterface.OnCancelListener! Found: () - > Unit围绕被覆盖的功能。

有什么建议?

android android-dialog kotlin motionevent

1
推荐指数
1
解决办法
1212
查看次数

将记录/播放MotionEvents的Android后台服务

我正在寻找一个应用程序来运行后台服务,该服务将始终记录MotionEvents(即使不在应用程序中)并将它们存储在某种日志文件中.然后,在请求时,将重放这些MotionEvent以模拟用户与设备交互.

正如您可能猜到的,这是UI自动化.

我即将开始自己写这个应用程序,但我想确保我没有重新发明轮子

user-interface automation android record motionevent

0
推荐指数
1
解决办法
383
查看次数

如何在dispatchTouchEvent中检测MotionEvent

我做了一个FragmentActivity.一些碎片包括一个EditText.

我想,当软输入键盘启动并MotionEvent发生时 - 除了在EditText内部单击的事件 - 要隐藏的软输入.到现在为止,我在MainActivity中编写了这段代码:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    InputMethodManager im = (InputMethodManager) getApplicationContext()
                                  .getSystemService(Context.INPUT_METHOD_SERVICE);
    im.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(),
                                   InputMethodManager.HIDE_NOT_ALWAYS);
    return super.dispatchTouchEvent(ev);
}
Run Code Online (Sandbox Code Playgroud)

它似乎工作.但是当我在EditText中单击时,它会隐藏并再次出现.我不希望这种情况发生.在这种情况下,我希望键盘只是保留在屏幕上.

  1. dispatchTouchEvent()当我点击Fragment里面的EditText时,有什么方法可以禁用吗?

  2. 有没有办法检测其中的EditText的click事件dispatchTouchEvent()并在那里创建条件,这会禁用隐藏的软输入?

android android-softkeyboard motionevent

0
推荐指数
1
解决办法
2636
查看次数

Android的 - 禁用滚动按住按钮

我心中已经有了一个Button内部ScrollView

<ScrollView>
    <LinearLayout>
        ...
        <Button/>
        ...
    <LinearLayout/>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

我正在使用此按钮来记录语音。当它捕获到MotionEvent.ACTION_DOWN事件时,我开始重新编码,并在MotionEvent.ACTION_DOWN事件停止时将其停止。

buttomRecord.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            startRecording();
            return true;
        }
        else if(event.getAction() == MotionEvent.ACTION_UP){
            stopRecording();
            return true;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

当用户录制语音,如果这个问题是ScrollView滚动向上或向下,该按钮就会失去焦点,从来没有抓MotionEvent.ACTION_UP事件。

怎样才能锁定焦点Button,而我拿着它或禁用ScrollView滚动?

android ontouchlistener android-scrollview android-button motionevent

0
推荐指数
1
解决办法
1767
查看次数