鉴于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) 我将自定义子视图放入 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) 我的问题是检测到所有触摸事件,但没有检测到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中的简单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) 这是我的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) 我的代码是用 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围绕被覆盖的功能。
有什么建议?
我正在寻找一个应用程序来运行后台服务,该服务将始终记录MotionEvents(即使不在应用程序中)并将它们存储在某种日志文件中.然后,在请求时,将重放这些MotionEvent以模拟用户与设备交互.
正如您可能猜到的,这是UI自动化.
我即将开始自己写这个应用程序,但我想确保我没有重新发明轮子
我做了一个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中单击时,它会隐藏并再次出现.我不希望这种情况发生.在这种情况下,我希望键盘只是保留在屏幕上.
dispatchTouchEvent()当我点击Fragment里面的EditText时,有什么方法可以禁用吗?
有没有办法检测其中的EditText的click事件dispatchTouchEvent()并在那里创建条件,这会禁用隐藏的软输入?
我心中已经有了一个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
android ×9
motionevent ×9
automation ×1
java ×1
kotlin ×1
listview ×1
record ×1
touch-event ×1