android 自定义LinearLayout圆角60dp的矩形水印图片
时间: 2023-12-06 09:44:43 浏览: 122
Android自定义LinearLayout布局显示不完整的解决方法
你可以通过以下步骤来实现:
1. 创建一个自定义的 LinearLayout 类,并继承 LinearLayout。
2. 在自定义 LinearLayout 类的构造方法中,调用 setWillNotDraw(false) 方法,以允许绘制自定义视图。
3. 重写 onDraw(Canvas canvas) 方法,在其中绘制矩形水印图片。可以使用 Bitmap 和 Canvas 组合来绘制图片。
4. 在 onDraw() 方法中,调用 super.onDraw(canvas) 方法,以便在绘制自定义视图之后绘制子视图。
5. 在自定义 LinearLayout 类的 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 方法中,设置 LinearLayout 的宽度和高度,以确保矩形水印图片的边角是圆形的。可以使用 MeasureSpec.getSize() 和 MeasureSpec.getMode() 方法来获取宽度和高度。
以下是示例代码:
```
public class RoundedLinearLayout extends LinearLayout {
private Bitmap watermarkBitmap;
public RoundedLinearLayout(Context context) {
super(context);
setWillNotDraw(false);
}
public RoundedLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
setWillNotDraw(false);
}
public RoundedLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setWillNotDraw(false);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (watermarkBitmap != null) {
int bitmapWidth = watermarkBitmap.getWidth();
int bitmapHeight = watermarkBitmap.getHeight();
// 获取 LinearLayout 的宽度和高度
int widthSpec = MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY);
int heightSpec = MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY);
// 创建 Canvas 对象
Canvas watermarkCanvas = new Canvas(watermarkBitmap);
// 创建矩形对象
RectF rectF = new RectF(0, 0, bitmapWidth, bitmapHeight);
// 创建画笔对象
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
// 绘制圆角矩形
watermarkCanvas.drawRoundRect(rectF, 60, 60, paint);
// 在 canvas 上绘制矩形水印图片
canvas.drawBitmap(watermarkBitmap, null, new Rect(0, 0, getWidth(), getHeight()), null);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 获取 LinearLayout 的宽度和高度
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
// 设置 LinearLayout 的宽度和高度
setMeasuredDimension(width, height);
// 创建 Bitmap 对象
watermarkBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
}
}
```
你可以在 XML 布局文件中使用该自定义 LinearLayout 类,如下所示:
```
<com.example.RoundedLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 添加子视图 -->
</com.example.RoundedLinearLayout>
```
阅读全文