我有ReltiveLayout和ImageView以及一个TextView里面。

所以我有两个事件监听器:


onClick
onTouch


我正在对图像使用9patch。当我使用onTouch事件时,onClick根本无法触发,并且onTouch也无法很好地工作。如果我禁用了onTouch并保留onClick,则它将触发并更改“活动”。我想使onTouch和onClick一起工作。我想要:


单击RelativeLayout时,将显示选定的按钮ImageView
否则显示普通按钮ImageView
onClickListener更改活动。


这是我的代码:

StartBtn = (RelativeLayout) findViewById(R.id.StartBtn);
StartBtnImage = (ImageView) findViewById(R.id.StartBtnImage);
StartBtnText = (TextView) findViewById(R.id.StartBtnText);

StartBtn.setOnTouchListener(new TouchButton(StartBtnImage)); //Commenting this line makes the onClickListener work
StartBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        StartBtnImage.setImageResource(R.drawable.btn_selected);
        Log.d("ButtonClick", "Done");
        Intent myIntent = new Intent(MainMenu.this, Game.class);
        startActivity(myIntent);

    }
});


还有我的TouchButton类:

public class TouchButton implements View.OnTouchListener {

    ImageView IV;

    public TouchButton(ImageView Image) {
        IV = Image;
    }

    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                IV.setImageResource(R.drawable.btn_selected);
                return true;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_OUTSIDE:
            default:
                IV.setImageResource(R.drawable.btn);
                return false;
        }
    }
}


这是我的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainMenu">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/MainMenuBg"
    android:background="@drawable/main_menu_bg" />

<RelativeLayout
    android:layout_width="250dp"
    android:layout_height="75dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="130dp"
    android:id="@+id/StartBtn"
    android:clickable="true">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/StartBtnImage"
        android:src="@drawable/btn" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Start"
        android:id="@+id/StartBtnText"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:singleLine="false"
        android:gravity="center|center_vertical|center_horizontal"
        android:textSize="50dp" />
</RelativeLayout>




我知道我不好解释,所以这是一个视频:https://www.youtube.com/watch?v=PtdUsW-Dnqk

最佳答案

更新:由于不能在单个视图see link上使用多个侦听器。
您可以在TouchButton.class中实现.setOnClickListener的行为。

public class TouchButton implements View.OnTouchListener {

ImageView IV;

public TouchButton(ImageView Image) {
    IV = Image;
}

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            IV.setImageResource(R.drawable.btn_selected);
            return true;
        case MotionEvent.ACTION_UP:
            switch(v.getId()){
                case R.id.StartBtn:
                   IV.setImageResource(R.drawable.btn_selected);
                   Log.d("ButtonClick", "Done");
                   Intent myIntent = new Intent(MainMenu.this, Game.class);
                   startActivity(myIntent);
                   break;
             return true;
        case MotionEvent.ACTION_OUTSIDE:
        default:
            IV.setImageResource(R.drawable.btn);
            return false;
    }
  }
}

关于android - onTouch和onClick无法正确触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32725111/

10-11 01:07