android - 手动定义布局参数,意味着我想使用我的值来定义布局的边界

标签 android android-layout button android-linearlayout android-relativelayout

我是安卓新手。我想在 android 中创建自己的自定义按钮;我用来创建自定义按钮的方法是; 1. 在 paint 中绘制任何你想要的简单图像,然后转到可绘制资源,然后粘贴该图像。从那里,我们可以将这些图像用作按钮。 假设我的图像是这样的,enter image description here

我将此图像的其余部分(不包括绿色)设为透明,这样我将只使绿色区域可触摸,为此我使用此代码,

 Bitmap TheBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.green);
        int eventPadTouch = event.getAction();
        int iX = (int) event.getX();
        int iY = (int) event.getY();

        int[] location = new int[2];
        v.getLocationOnScreen(location);

        int viewX = location[0];
        int viewY = location[1];


        switch (eventPadTouch) {
            case MotionEvent.ACTION_DOWN:
                if (iX>=viewX & iY>=viewY & iX<=(viewX+TheBitmap.getWidth()) & iY<=(viewY+TheBitmap.getHeight())) {                 
                    if (TheBitmap.getPixel(iX,iY)!=0) {

                        Intent intent = new Intent(this, NewActivity.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);

                        showPressedState();
                        return false; 
                    } 
                }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                showNormalState();
                break;
        }           
        return true;
    }

但是当我像这样制作这张图片时, enter image description here 我面临的问题是图像中曲线部分下方再次可触摸,但我使其不可触摸。 当我转到下一个问题时,如果我想创建这种按钮 enter image description here 我想让所有的部分都用作按钮,这样我就可以在上面执行不同的 Activity ,这可能吗?

我发现这一切正在发生,因为 android 只提供有限类型的布局 比如线性布局、相对布局、WEBVIEW。 那么,有没有什么方法可以定义我们自己的布局方式,如果我能够给出布局的边界。

最佳答案

我的想法是,你手动检查你按下的像素的颜色是什么,并基于此,你可以切换不同的触摸事件(不同颜色的情况)。我认为没有更简单的方法可以实现您想要实现的目标。

但是,如果您的图像由渐变组成,或者在不同的可点击区域中包含相同的颜色怎么办?考虑以下示例:

enter image description here

如您所见,图片有 4 个不同的颜色区域,但每个区域中也有很多白色像素,对吧?如果按钮背景不是纯色,但例如由渐变等组成,那么您可以使它们中的每一个都具有不同的 transparency 值(255,254,253 等),这不会被用户注意到但您可以轻松使用它来区分您按下的区域。

所以在 onClick 方法中:

//Not sure about below line
alpha = ((bitmap.getPixel((int)event.getX(), (int)event.getY())) >>> 24);

switch(alpha) 
{
    case 255:
        //your code
    break;
    case 254:
        //your code
    break;
    default:
        //your code
    break;
}

此外,您可以考虑阅读以下内容:

关于android - 手动定义布局参数,意味着我想使用我的值来定义布局的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269046/

相关文章:

java - 如何让volley onResponse在UnitTest线程中运行

Android 添加一个填充,其大小在所有设备上看起来都相同

java - 在android TextView中格式化长段落

javascript - 如何使用 React 在单击时动态添加和删除类?

html - 想要 HTML 按钮发送带有输入详细信息的电子邮件

java按钮按下3秒

android - 在我调试的自定义适配器中未调用 Getview,我发现位置返回为 -1

android - EditText 不 wrap_content

android - 从错误的线程+内部类调用..奇怪的行为

android - 如何设置android :layout_weight and android:layout_width in code?