android - 将单击设置为单个布局中的两个不同的三角形图像

标签 android layout

我尝试将点击设置为如图所示放置的三角形图像。但问题是只有一个图像点击有效。我已经实现如下:

enter image description here

 <ImageView 
  android:id="@+id/twoWheeler" android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  android:src="@drawable/front_screen_design_twowheeler" 
  android:scaleType="fitStart"/>


   <ImageView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/fourWheeler" 
    android:src="@drawable/front_screen_design_fourwheeler" 
    android:scaleType="fitEnd" />



two.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i=new Intent(MainActivity.this,BikeActivity.class);
        startActivity(i);
    }
});
four.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i=new Intent(MainActivity.this,FourActivity.class);
        startActivity(i);
    }
});

最佳答案

正如您在问题中提到的,我已经为您的解决方案创建了相同的示例。

我使用了两个半透明区域的图像。

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rlParent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/triangle" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/triangle2" />

</RelativeLayout>

MainActivity.java

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private ImageView imageView, imageView1;
    private RelativeLayout rlParent;


    private void showToast(String message) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        rlParent = (RelativeLayout) findViewById(R.id.rlParent);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView1 = (ImageView) findViewById(R.id.imageView1);

        rlParent.setOnTouchListener(new MyTouchListener(rlParent, this));
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.imageView:
                showToast("Image 1 Click");
                break;
            case R.id.imageView1:
                showToast("Image 2 Click");
                break;
        }
    }

    private class MyTouchListener implements View.OnTouchListener {

        private ViewGroup viewGroup;
        private View.OnClickListener onClickListener;

        public MyTouchListener(ViewGroup viewGroup, View.OnClickListener onClickListener) {
            this.viewGroup = viewGroup;
            this.onClickListener = onClickListener;
        }

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_UP:
                    for (int pos = 0; pos < viewGroup.getChildCount(); pos++) {
                        View view = viewGroup.getChildAt(pos);
                        Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
                        Canvas canvas = new Canvas(bitmap);
                        view.draw(canvas);
                        int x = (int) event.getX();
                        int y = (int) event.getY();

                        if (bitmap.getPixel(x, y) != Color.TRANSPARENT) {
                            if (onClickListener != null) {
                                onClickListener.onClick(view);
                                break;
                            }
                        }
                    }
                    break;
            }
            return true;
        }

    }
}

您可以查看下面的屏幕截图以检查特定图片的点击情况,

截图

希望对你有帮助。

关于android - 将单击设置为单个布局中的两个不同的三角形图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45974019/

相关文章:

ruby-on-rails - 特定 Action 的渲染布局

css - 980px 换行 1px left & border + 2 footer same size right below it not aligning properly

android - 为什么我得到-无法解析com.squareup.retrofit2:Retrofit:2.3.0

java - Android Activity 在服务准备好之前访问服务的静态引用

带有 CardView 的 Android RecyclerView - 以类似堆栈的方式显示卡片(不是列表)

php - 在 YII 中删除特定页面的页眉和页脚的最佳方法

Android - Facebook SDK 3 - 如何从非 Activity 类以编程方式登录

android - android studio中的光标选择矩形区域

ruby-on-rails - 从局部添加内容到布局

CSS 在居中元素旁边动态居中 div