使用Shape创建一个Android ImageButton

时间:2012-07-10 09:35:13

标签: android android-layout

我有一个ImageButton,想要缩放不同大小的按钮,这意味着图像不是正确的选择。所以我想到了一个自定义Shape作为源的ImageButton。

我希望按钮看起来像这样:

enter image description here

我从这开始,但被旋转的东西困住了:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    
    <stroke
        android:width="2dp"
        android:color="@color/red" />
    <rotate
        android:fromDegrees="90"
        android:toDegrees="135" >
        <shape android:shape="line" >
            <stroke
                android:width="2dp"
                android:color="@color/red" >
            </stroke>
        </shape>
    </rotate>

    <padding
        android:bottom="7dp"
        android:left="7dp"
        android:right="7dp"
        android:top="7dp" />

</shape>

然而,这并不像我预期的那样旋转。也许我完全错了,需要朝着正确的方向努力。 :-)谢谢。

3 个答案:

答案 0 :(得分:0)

您是否考虑使用Bitmap并根据您的需要使用Bitmap.createScaledBitmap(...)方法对其进行缩放。然后你可以轻松地将它转换为BitmapDrawable,然后使用(你的按钮名称).setBackgroundDrawable(nameOfBitmapDrawable);

将此BitmapDrawable指定为按钮的背景。

所以你要做的就是将那个图像(你的帖子中的那个)保存为drawable(也许是透明的PNG),然后将Drawable转换为Bitmap。从那里,你只需要按照我上面概述的步骤。希望这会有所帮助。

答案 1 :(得分:0)

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
             android:shape="rectangle"
             >
  <gradient android:angle="270"
            android:endColor="#000000"
            android:centerColor="#00ccff" 
            android:startColor="#000000"
           /> 
  <corners android:radius="5dp" /> 
  </shape>
Try this 

答案 2 :(得分:0)

我通过自定义Button实现解决了这个问题,并覆盖了onDraw()方法,如下所示:

@Override
public void onDraw(Canvas canvas)
{
    width = getMeasuredWidth();
    height = getMeasuredHeight();

    // diagonal top left | bottom right
    canvas.drawLine(0, 0, width, height, mPaint);

    // diagonal top right | bottom left
    canvas.drawLine(width, 0, 0, height, mPaint);

    // horizontal top
    canvas.drawLine(0, 0, width, 0, mPaint);

    // horizontal bottom
    canvas.drawLine(0, height, width, height, mPaint);

    // vertical left
    canvas.drawLine(0, 0, 0, height, mPaint);

    //vertical right
    canvas.drawLine(width, 0, width, height, mPaint);
}

您必须根据您想要中风的颜色和大小等设置mPaint