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

时间:2013-06-24 06:15:11

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

我是android新手。我想在android中创建自己的自定义按钮;我用来创建自定义按钮的方法是; 1.在绘画中随意绘制一个简单的图像,然后转到可绘制的资源,然后粘贴该图像。从那里,我们可以将这些图像用作按钮。 假设我的图像是这样的,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 我想将所有部分都用作按钮,以便我可以执行不同的活动,是否可能?

我发现这一切都在发生,因为android只提供有限类型的布局 比如LINEAR LAYOUT,RELATIVE LAYOUT,WEBVIEW。 那么,有没有办法定义我们自己的布局意味着我是否能够给出布局的boudries。

1 个答案:

答案 0 :(得分:5)

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

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

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;
}

另外,您可以考虑阅读: