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