如何在Android中制作彼此重叠的自定义形状按钮

时间:2015-04-15 13:53:19

标签: android button android-imagebutton

我有6个单独的图像,背景透明。如何将所有这些图像组合成按钮,如:

enter image description here

根据我的阅读,我想我必须使用帧布局才能有重叠的按钮。

点击时,我需要每种颜色都是一个单独的按钮。

更新:我做了一个演示,并在onclick方法中检查透明度 但是当我点击红色和蓝色交叉点附近的红色区域时,由于视图重叠,它没有注册红色按钮被点击。请帮忙!

https://www.dropbox.com/s/fc98nnnfbrtdh82/Photo%20Apr%2016%2C%202%2002%2013.jpg?dl=0

public boolean onTouch(View v,MotionEvent event){

                                     int eventPadTouch = event.getAction();
                                     int iX = (int)event.getX();
                                     int iY = (int)event.getY();          
                                     switch (eventPadTouch) {

                                         case MotionEvent.ACTION_DOWN:

                                             if (iX>=0 & iY>=0 & iX<TheBitmap.getWidth() & iY<TheBitmap.getHeight()&TheBitmap.getPixel(iX,iY)!=0) {
                                                 if (TheBitmap.getPixel(iX,iY)!=0) {
                                                     Toast.makeText(getApplicationContext(),"clicked blue",Toast.LENGTH_LONG).show();

                                                 }
                                             }
                                             return true;
                                     }

                                     return false;
                                 }
                             }

2 个答案:

答案 0 :(得分:2)

您需要使用相对布局来使用ImageView放置背景图像,如下所示:

activity_layout.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/bg"/> 
</RelativeLayout>

之后你需要在drawable中创建一个单独的xml文件,尽可能地定义每个形状在这里阅读更多相关信息: http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

示例形状xml文件就像这样

抽拉/ myshape1.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

<stroke
  android:width="2dp"
  android:color="#FFFFFF" />

<corners android:radius="5dp" />

<gradient
  android:angle="270"
  android:centerColor="#6E7FFF"
  android:endColor="#142FFC"
  android:startColor="#BAC2FF" /> 
</shape>

最后,在创建完所有形状之后,您可以将它们添加到您的activity_layout.xml文件中,如下所示:

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/bg"/>


        <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_margin="20dp"
        android:background="@drawable/myshape1"
        android:orientation="vertical"
        android:padding="5dp" >


</RelativeLayout>

确保创建的形状尽可能透明,并将onClick处理程序附加到它们以执行分配的任务。

编辑:

根据您的评论,还有另一种方法可以通过覆盖OnTouch侦听器,从位图捕获像素并确定其颜色来实现此目的。

imageView.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
         if (event.getAction() == MotionEvent.ACTION_DOWN){
                ImageView imageView = (ImageView) v;
                Bitmap bitmap =((BitmapDrawable)imageView.getDrawable()).getBitmap();
                int pixel = bitmap.getPixel(event.getX(),event.getY());
                int redValue = Color.red(pixel);
                int blueValue = Color.blue(pixel);
                int greenValue = Color.green(pixel);
//Now that you know the color values you can decide on what you want to do based on the color combination.
         }
         return true;
     }
});

答案 1 :(得分:0)

您始终可以使用RelativeLayout作为包装,然后将未来按钮添加为子项,您可以将它们放置为重叠。

例如:

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
    *
    *
    *
</RelativeLayout>

然后,您可以使用路线/边距/坐标来定位ImageView s(或Button s。)

希望它有所帮助。