Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何画一条圆角正方形的线?_Android_Drawing - Fatal编程技术网

Android 如何画一条圆角正方形的线?

Android 如何画一条圆角正方形的线?,android,drawing,Android,Drawing,我很高兴你的帮助!我使用以下代码: Paint mPaintShape = new Paint(); mPaintShape.setStrokeWidth(AppUtill.dp2px(getContext(), 4)); mPaintShape.setColor(mNormalColor); mPaintShape.setStyle(Paint.Style.STROKE); @Override protected void onDraw(Canvas canvas) {

我很高兴你的帮助!我使用以下代码:

Paint mPaintShape = new Paint();
mPaintShape.setStrokeWidth(AppUtill.dp2px(getContext(), 4));
mPaintShape.setColor(mNormalColor);
mPaintShape.setStyle(Paint.Style.STROKE);

@Override
    protected void onDraw(Canvas canvas) {
        RectF rect = new RectF(0, 0, mSize, mSize);
        canvas.drawRoundRect(rect, mCornerRadius, mCornerRadius, mPaintShape);
    }
我得到以下结果。但我想要圆角 我该怎么做


首先创建一个给定的样式文件 allround.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
    <shape  android:shape="rectangle">
        <solid
            android:color="#ff6600" />
        <stroke
            android:width="2dp"
            android:color="#EAD61C" />
        <corners
            android:radius="7dp" />
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp" />
    </shape>
</item>
<item>
    <shape android:shape="rectangle">
        <gradient
            android:startColor="#ffff00"
            android:endColor="#FEC34D"
            android:angle="270" />
        <stroke
            android:width="2dp"
            android:color="#2f6699" />
        <corners
            android:radius="7dp" />
        <padding
            android:left="5dp"
            android:top="5dp"
            android:right="5dp"
            android:bottom="5dp" />
    </shape>
</item>
</selector>
或者您可以使用>>>>>>>>

RectF r = new RectF(1,2,3,4);
canvas.drawRoundRect(r, 0, 0, mPaint);
试试这个:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawableRight="@drawable/btnpressed">
        <shape>
            <solid
                android:color="#6B0000" />
            <stroke
                android:width="3dp"
                android:color="#6B0000" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:startColor="#794C3F"
                android:endColor="#794C3F"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="#794C3F" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
此解决方案使用Canvas.drawLine和Canvas.draw弧。我引入了偏移,并根据测量的高度/宽度设置“mSize”,以确保所有边上都可以看到所需的笔划宽度。当然,修改“mCornerRadius”将改变拐角

我使用了一种圆角半径为8的红色油漆来获得:


谢谢,但是我需要用OnDraw的方法来做这件事,我已经补充了我的问题的解决方案,我想得到一条外角呈正方形的线。你想邀请我使用两个完全填充的正方形吗?这样一个外部有圆角,而内部没有?
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawableRight="@drawable/btnpressed">
        <shape>
            <solid
                android:color="#6B0000" />
            <stroke
                android:width="3dp"
                android:color="#6B0000" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:startColor="#794C3F"
                android:endColor="#794C3F"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="#794C3F" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
    @Override
protected void onDraw(Canvas canvas)
{
    // to make sure that the whole shape fits into the View
    // (else some lines may be thinner/ missing)
    mSize = Math.min(getMeasuredHeight(), getMeasuredWidth())*0.8f;

    float offset_top = 4;
    float offset_left = 4;
    float sizeMinusRadius = mSize - mCornerRadius;

    // horizontal lines
    canvas.drawLine(offset_left + mCornerRadius, offset_top, offset_left + sizeMinusRadius, offset_top, mPaintShape);
    canvas.drawLine(offset_left + mCornerRadius, offset_top + mSize, offset_left + sizeMinusRadius, offset_top + mSize, mPaintShape);

    // vertical lines
    canvas.drawLine(offset_left, offset_top + mCornerRadius, offset_left, offset_top + sizeMinusRadius, mPaintShape);
    canvas.drawLine(offset_left + mSize, offset_top + mCornerRadius, offset_left + mSize, offset_top + sizeMinusRadius, mPaintShape);

    // corner bottom left
    RectF rBottomLeft = new RectF(offset_left, 
          offset_top + mSize - 2 * mCornerRadius, offset_left + 2 * mCornerRadius,
          offset_top + mSize);
    canvas.drawArc(rBottomLeft, 90, 90, false, mPaintShape);
    // corner bottom right
    RectF rBottomRight = new RectF(offset_left + mSize - 2 * mCornerRadius,
        offset_top + mSize - 2 * mCornerRadius, offset_left + mSize, offset_top + mSize);
    canvas.drawArc(rBottomRight, 0, 90, false, mPaintShape);
    // corner top left
    RectF rTopLeft = new RectF(offset_left, offset_top, 
                offset_left + 2 * mCornerRadius, offset_top + 2 * mCornerRadius);
    canvas.drawArc(rTopLeft, 180, 90, false, mPaintShape);
    // corner top right
    RectF rTopRight = new RectF(offset_left + mSize - 2 * mCornerRadius, offset_top, 
                            offset_left + mSize, offset_top + 2 * mCornerRadius);
    canvas.drawArc(rTopRight, 270, 90, false, mPaintShape);
}