标签: touch-event

是否可以将onTouchEvent传递给Android中的多个视图?

我已经在SO上阅读了关于这个主题的几个问题,但还没有找到一个可靠的答案.

我有一个framelayout,我堆叠多个自定义视图,但onTouch事件只适用于顶视图.(自定义视图与具有相同onTouch事件的所有视图相同,只是其中的多个)

的FrameLayout

  • customView [2] <---这是添加的最后一个视图,也是唯一一个接收该事件的视图
  • customView [1]
  • customView [0]

我正在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)

android view touch-event android-framelayout

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

仅查看注册MotionEvent.ACTION_DOWN

我有一个有趣的问题......我似乎无法找到解决方案.我正在使用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)

android motion-detection ontouchlistener touch-event

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

onTouchEvent 不起作用

我正在使用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 touch-event

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

multiTouch android | 获得每个接触点的动作

我想在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)

android touchscreen multi-touch ontouchlistener touch-event

5
推荐指数
0
解决办法
3822
查看次数

UIScrollView作为UICollectionViewCell的子视图 - 将tap传递给superview

我有一个UICollectionViewCell包含a 的自定义子类UIScrollView.

滚动视图正确滚动,但是它会截取水龙头,因此集合视图单元格突出显示和选择无法按预期工作.

设置userInteractionEnabledNO使水龙头"通过",但滚动没有(当然)工作.

覆盖hitTest:withEvent:是没有用的,因为我需要知道它是转发之前的点击还是平移.

有什么想法吗?

uiscrollview touch-event uigesturerecognizer ios uicollectionviewcell

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

使用viewpager和导航抽屉从左向右滑动

我有一个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 touch-event android-viewpager navigation-drawer

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

如何将多个图像视图拖放到其他图像视图android上

我是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)

android drag-and-drop touch-event

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

如何在android webview中的特定坐标处模拟点击?

我能够使用 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 事件,但也没有运气。

关于我做错了什么的任何想法?

android webview ontouchlistener touch-event motionevent

5
推荐指数
2
解决办法
2236
查看次数

将Touch事件从DialogFragment视图调度到父活动视图

这是我的布局的样子:

在此处输入图片说明

我有一个父活动,它具有一个自定义视图(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

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

通过拖动它们来选择多个项目

首先,让我告诉你,我对此感到压力,因为我甚至不知道概念/方法名称,所以我甚至无法在谷歌搜索它,因为我不知道关键字,但生病了最好解释一下.您可以根据需要随意修改我的内容和标题.

我想要实现的是:我有视图组包含许多子视图,或者它可以是GridView我想能够阻止选择其中一些子视图,并返回所选/阻止的项目.

价值超过千字的图片: 在此输入图像描述

感谢任何帮助,非常感谢.

android gridview gesture touch-event

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