我已经在SO上阅读了关于这个主题的几个问题,但还没有找到一个可靠的答案.
我有一个framelayout,我堆叠多个自定义视图,但onTouch事件只适用于顶视图.(自定义视图与具有相同onTouch事件的所有视图相同,只是其中的多个)
的FrameLayout
我正在Android 2.2上测试它,我想知道下面的其他视图是否有任何方法可以知道触摸发生在哪里?
编辑(添加一些代码)
我正在添加一些代码,以帮助解释我遇到问题的地方.起初我只是自动onTouchEvent返回true.这使得最后一个视图(在我的情况下是customerView [2])将是唯一一个生成值的视图.
但是,一旦我添加了设置onTouchEvent为返回true或false的方法,现在返回生成值的唯一视图是customView [0].
我希望这能解决我所要求的问题.我对此很陌生,我很感谢你花时间解释它(当然我感谢你的耐心等待).
此外,我意识到我的TextView不会更新每个touchEvent的值,我正在努力修复它.
我的活动:
public class MyActivity extend Activity {
CustomView[] customView;
TextView[] textView;
int numViews 3;
//FrameLayout and Params created
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
for(int i = 0; i < numViews; i++) {
customView[i] = new CustomView(this, i);
//Allows the onTouch to be handled by all Views - View[0] is the …Run Code Online (Sandbox Code Playgroud) 我有一个有趣的问题......我似乎无法找到解决方案.我正在使用ObjectAnimator来旋转ImageView; 但onTouchListener似乎只是注册了MotionEvent.ACTION_DOWN.(我从Log Cats中推断出这个,还有MotionEvent.ACTION_MOVE和MotionEvent.ACTION_UP).
我想也许问题可能与试图同时倾听和动画片有关.我在相对布局中包装了imageview和线性布局(设置为MATCH PARENT),并注册了线性布局以监听触摸事件.线性布局具有相同的问题; 只处理MotionEvent.ACTION_UP.有什么东西我需要去注册MotionEvent.ACTION_MOVE吗?
这是我的代码:
touch_pad = (LinearLayout) findViewById(R.id.layout_touch_capture);
touch_pad.setOnTouchListener(this);
touch_pad.requestFocus();
public boolean onTouch(View v, MotionEvent event) {
switch(v.getId()) {
case (R.id.layout_touch_capture):
long end = 0;
long start = 0;
float y = event.getY();
float y_sum = y;
float x = event.getX();
switch(event.getAction()) {
case (MotionEvent.ACTION_UP):
end = animator.getCurrentPlayTime();
Log.d("WheelActivity", "end location = " + end);
break;
case (MotionEvent.ACTION_MOVE):
Log.d("WheelActivity", "event.getY() = " + y);
y_sum += y;
animator.setCurrentPlayTime((long) (start + y_sum));
Log.d("WheelActivity", "animator play time = " …Run Code Online (Sandbox Code Playgroud) 我正在使用MapView. 我需要对用户的触摸事件做出反应。我尝试处理 onTouchEvent使用dispatchTouchEvent. 但这onTouchEvent不叫!当我将此代码添加到dispatchTouchEvent:
MarkerOverlay myMarker = new MarkerOverlay(marker,edTxtAlarmClockName.getText().toString());
mapView.getOverlays().add(myMarker);
mapView.invalidate();
Run Code Online (Sandbox Code Playgroud)
onTouchEvent叫做。为什么会这样以及如何描述overlay处理程序?
public class MainActivity extends MapActivity implements OnTouchListener{
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private MyLocationOverlay myLocationOverlay;
private Context context;
public GeoPoint lastClickedPoint;
Dialog dialog;
EditText edTxtAlarmClockName;
ToggleButton tbOnOffAlarmClock;
boolean reClick ;
private int lastTouchX, lastTouchY;
private boolean hasMoved = false;
Button btnOk;
Button btnCancelDelete;
Button btnAlarmClockStop;
public int distance=50;
private int indexOfSelectedOverlay;
public …Run Code Online (Sandbox Code Playgroud) 我想在android中处理multiTouch,我的计划是在应用程序中使用2个手指.我知道如何使用一个触摸点,但我不确定如何使用多个触点.
这是我的代码,OnTouch:
public boolean onTouch(View view, MotionEvent event) {
for(int i = 0; i < event.getPointerCount(); i++){
float x = event.getX(i);
float y = event.getY(i);
// using the data here...
//....
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在我得到每个点的x和y坐标后,我将如何得到发生的动作?我想使用event.getAction,但它不采用点索引等参数.我怎样才能获得每个触摸点的动作类型?
更新:好的,所以现在我可以成功管理和处理两个手指,现在,在我完成之后,我做了一个简单的类Finger来处理每个触摸点,现在每当我有两个手指在屏幕上,我尝试删除其中一个,然后移动/删除另一个手指,游戏只是崩溃!
OnTouch:
public boolean onTouch(View view, MotionEvent event) {
int pointerCount = event.getPointerCount();
if(pointerCount > 2){
pointerCount = 2;
System.out.println("too many fingers!");
} // since i want to handle only two fingers, every other finger will be ignored.
for (int …Run Code Online (Sandbox Code Playgroud) 我有一个UICollectionViewCell包含a 的自定义子类UIScrollView.
滚动视图正确滚动,但是它会截取水龙头,因此集合视图单元格突出显示和选择无法按预期工作.
设置userInteractionEnabled以NO使水龙头"通过",但滚动没有(当然)工作.
覆盖hitTest:withEvent:是没有用的,因为我需要知道它是转发之前的点击还是平移.
有什么想法吗?
uiscrollview touch-event uigesturerecognizer ios uicollectionviewcell
我有一个viewpager和一个导航抽屉.两者都在水平滑动上执行操作,但我如何控制哪一个负责滑动操作?
我的观看者:
Fragment[] allPictures = new Fragment[getNrPictures()];
APicturePageAdapter adapter = new APicturePageAdapter(super.getSupportFragmentManager(), allPictures);
vP = (ViewPager) findViewById(R.id.picPage);
vP.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
通过从右向左滑动,我可以浏览图片.工作良好.然后我添加了一个导航抽屉:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:id="@+id/PicturePageContentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="2dp"
android:orientation="vertical" >
.......
</LinearLayout>
<LinearLayout
android:id="@+id/left_drawer_ll"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
... content
</TextView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
打开和关闭抽屉工作正常,一切似乎都在工作.但是,当我触摸抽屉并向左滑动时,我希望抽屉自己关闭,而不是取景器翻转到上一张图片.如何控制谁负责onTouch事件?
谢谢你的帮助.
我是Android新手.当前代码可以在单个ImageView上拖放多个图像视图,但我无法将它们放在多个图像视图上.请帮助我如何修改我的代码或任何其他现有代码.
MainActivity.java
package n.f.letters;
import android.app.Activity;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends Activity implements OnTouchListener {
/** Called when the activity is first created. */
private View selected_item = null;
private int offset_x = 0;
private int offset_y = 0;
Boolean touchFlag=false;
boolean dropFlag=false;
LayoutParams imageParams;
ImageView imageDrop,image1,image2,image3,image4;
int crashX,crashY;
Drawable dropDrawable,selectDrawable;
Rect dropRect,selectRect;
int topy,leftX,rightX,bottomY;
int dropArray[]; …Run Code Online (Sandbox Code Playgroud) 我能够使用 MotionEvent.obtain 在典型的 android 视图(文本框、按钮等)上模拟点击事件,如下所示:
int meta_state = 0;
MotionEvent motionEvent = MotionEvent.obtain(
SystemClock.uptimeMillis(),
SystemClock.uptimeMillis(),
MotionEvent.ACTION_DOWN,
x,
y,
meta_state
);
motionEvent.recycle();
view_tapped.dispatchTouchEvent(motionEvent);
Run Code Online (Sandbox Code Playgroud)
view_tapped 是对我要将事件发送到的视图的引用。但是,当我在 webview 上调用 dispatchTouchEvent 时,它似乎没有点击里面的任何元素。
我还在 webview 中放置了一个 onTouchListener,然后当视图被手指实际点击时转储与motionevent 相关的所有信息,然后创建一个具有所有相同信息的新motionevent 并将其分派到webview,它没有点击屏幕。onTouchListener 仍然被触发,但屏幕上的元素没有被点击。
我还尝试使用 Javascript 来完成它,通过尝试找出特定坐标处的元素,然后通过注入 javascript 来触发 click 事件,但也没有运气。
关于我做错了什么的任何想法?
这是我的布局的样子:

我有一个父活动,它具有一个自定义视图(view1本身可处理onTouch事件)和2个按钮(view2和view3)。DialogFragment具有显示的可见布局,其余均为透明。我的对话框片段如下所示:
public class FragmentText extends DialogFragment{
public static FragmentText newInstance() {
FragmentText frag = new FragmentText();
frag.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar);
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
// instantiate the custom layout
final View layout = inflater.inflate(R.layout.fragment_layout, null);
.....
}
}
Run Code Online (Sandbox Code Playgroud)
布局文件如下所示:
<com.TransparentView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layMain"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="70dp"
android:background="@color/transparent"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="70dp" >
<LinearLayout
android:id="@+id/layContent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_margin="5dp"
android:background="@drawable/bk_text_edit"
android:orientation="vertical"
android:padding="@dimen/margin" >
all my layouts and buttons
</LinearLayout>
</com.TransparentView>
Run Code Online (Sandbox Code Playgroud)
和
public class …Run Code Online (Sandbox Code Playgroud) android ontouchlistener touch-event android-fragments android-dialogfragment
首先,让我告诉你,我对此感到压力,因为我甚至不知道概念/方法名称,所以我甚至无法在谷歌搜索它,因为我不知道关键字,但生病了最好解释一下.您可以根据需要随意修改我的内容和标题.
我想要实现的是:我有视图组包含许多子视图,或者它可以是GridView我想能够阻止选择其中一些子视图,并返回所选/阻止的项目.
价值超过千字的图片:
感谢任何帮助,非常感谢.
touch-event ×10
android ×9
gesture ×1
gridview ×1
ios ×1
motionevent ×1
multi-touch ×1
touchscreen ×1
uiscrollview ×1
view ×1
webview ×1