我有6个单独的图像,背景透明。如何将所有这些图像组合成按钮,如:
根据我的阅读,我想我必须使用帧布局才能有重叠的按钮。
点击时,我需要每种颜色都是一个单独的按钮。
更新:我做了一个演示,并在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;
}
}
答案 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。)
希望它有所帮助。