【问题标题】:How to know which View is being touched如何知道哪个视图被触摸
【发布时间】:2012-02-16 10:57:11
【问题描述】:

我正在尝试构建一个乒乓球游戏,球拍显示在屏幕底部,砖块显示在顶部。我使用三个视图,一个用于桨,一个用于球,另一个是绘制两个视图(球和桨)的主视图:

public void draw(Canvas canvas){
    BallView.draw(canvas);
    PaddleView.draw(canvas);
}

我想知道的是,如果我能准确地识别出哪个视图被触摸,我尝试在主 Activity 中使用 onTouchEvent 来做到这一点:

   @Override
    public boolean onTouchEvent(MotionEvent event){
        Log.d("touched", "touched")
        return true;
    }

但是,问题是,无论我触摸屏幕的哪个位置,桨都在移动,我希望只有当我触摸桨时,它才会移动。 那么,如果可能的话,我该怎么做? 谢谢。

【问题讨论】:

  • 给两个视图一个不同的 id.... private OnTouchListener tListener1 = new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event) 而不是简单地做 if(v.getId==R.id .blue) {} else if(v.getId==R.id.yellow){} 我希望这会奏效。
  • @pakshaheen 我可以从 java 文件中设置 ID 吗?因为我没有任何 XML 文件。
  • 是的,你可以这样做,例如滚动视图视图=新滚动视图(此); view.setId(2);
  • @pakshaheen 谢谢,但问题是 OnTouchListener 从未被调用...

标签: android android-layout view


【解决方案1】:

您可以通过另一种方式实现这一点,只需绘制两个与您的情况相同的蓝色和黄色的相对布局,并将其作为可点击的相对布局:来自 xml 的 true 并处理 onClick:"onClickHandler"。希望这对你有用。

                <RelativeLayout
                    android:id="@+id/rl_click_blue"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentRight="true"
                    android:background="#ffffff"
                    android:clickable="true"
                    android:onClick="onClickHandler">
                </RelativeLayout> 

                <RelativeLayout
                    android:id="@+id/rl_click_yellow"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentRight="true"
                    android:background="#ffffff"
                    android:clickable="true"
                    android:onClick="onClickHandler">
                </RelativeLayout> 

               // Handle your functionality here.
               public void onClickHandler(View v)
               {
                   switch (v.getId()) {
                       case R.id.rl_click_blue:
                           break;

                       case R.id.rl_click_yellow:

                          break;
                   }
               }

【讨论】:

    【解决方案2】:

    Android 的 OnTouch 事件已经有一个 View 类型参数,您可以使用它来识别触发该事件的视图。你可以找到一个例子here

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      相关资源
      最近更新 更多