【问题标题】:Android: Creating shaped buttonAndroid:创建形状按钮
【发布时间】:2011-10-15 14:04:47
【问题描述】:

如何创建这样的自定义按钮?

它应该只是可点击区域而不是真正的按钮。

【问题讨论】:

    标签: android button touch


    【解决方案1】:

    我在我的应用程序上使用了大量不规则形状的按钮,为了更改按钮的“热区”或“可点击区域”,我只使用Bitmap.getPixel() 方法来检查所用图像的 alpha。如果方法返回0,则不执行点击事件。

    示例: (1) 像往常一样创建您的按钮,随心所欲。 (2) 定义一个Bitmap 并为其分配与按钮相同的可绘制图像。 (3) 获取触摸或点击动作的 X 和 Y 坐标。 (4) 将坐标传递给.getPixel(x,y) 方法。

    示例代码:

    // ** Declare your Bitmap somewhere **
    final Bitmap TheBitmap;       
    TheBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.TheImage);
    
    // ** My onTouch code **
    public boolean onTouch(View v, MotionEvent event) {
    
            int eventPadTouch = event.getAction();
    
            switch (eventPadTouch) {
    
                case MotionEvent.ACTION_DOWN:
                    if (iX>=0 & iY>=0 & iX<TheBitmap.getWidth() & iY<TheBitmap.getHeight()) { // ** Makes sure that X and Y are not less than 0, and no more than the height and width of the image.                
                        if (TheBitmap.getPixel(iX,iY)!=0) {
                            // * A non-alpha area was clicked, do something 
                        }               
                    }
                    return true;                
            }           
            return false;
    }
    

    event.getX()event.getY() 只是为您提供您触摸按钮的位置的坐标。

    ** 上面的示例是为了指导您正确的方向。有一些检查要添加到代码中,以确保不会发生错误。

    【讨论】:

    • 这适用于重叠的视图/图像吗?不透明的部分永远不会重叠。
    【解决方案2】:

    使用您自己的画布或像这样使用 Photoshop 制作图像,然后使用 Bitmap.createScaledBitmap 根据按钮的尺寸对其进行缩放,因此您将获得此按钮。 使用画布,您必须编写更多代码,这样做就可以正常工作

    【讨论】:

      【解决方案3】:

      只需创建一个这样的图像,您就可以使用ImageViewButton 不带文本,并实现OnClickListener。它只是工作!

      【讨论】:

        【解决方案4】:

        将其保存为 png 并将其放入您的 drawables 文件夹中。然后在你的 xml 中使用类似这样的东西

        <Button
        android:height="wrap_content"
        android:width="wrap_content"
        android:background="@drawable/your_png"
        />
        

        我不是 100% 肯定切角会正常工作。消失的那个角落区域最终可能是可点击的。如果是这种情况并且如果您不希望这样,那么您必须在某处将图片切成两半创建两个按钮,您可以将它们设置为彼此相邻以构成该形状并使用相同的点击侦听器两个都。从用户的角度来看,它仍然看起来像一个按钮。

        【讨论】:

        • “消失的角落区域最终可能会被点击”......是的,这就是我要求解决方案的原因。
        • 那么你有一个选择是按照我在那里说的第二点:将你的 png 切成多个组合在一起以形成你想要的形状,并在两个部分上放置相同的点击侦听器。
        • 这并不能回答他的可点击区域不规则的问题;拥有多个按钮只是一种解决方法,而不是他正在寻找的解决方案。
        • @SoManyGoblins 因为它已被 OP 选为已接受的答案,所以我无法删除它......此时我无能为力。
        • 我知道它已经过时了,只是为了证明我的反对意见。
        猜你喜欢
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2013-08-10
        相关资源
        最近更新 更多