我在android中有一个需要某种形状的布局,即:
切角处。有没有办法以编程方式执行此操作而无需将布局背景设置为图像? 我希望尽可能减小应用尺寸,因此必须尽量减少应用中的可绘制数量。
答案 0 :(得分:5)
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.shapes.Shape;
public class WeirdShape extends Shape {
private static final int COLOUR = Color.BLACK;
private static final float STROKE_WIDTH = 1.0f;
private static final float CORNER = 35.0f;
private final Paint border = new Paint();
private final Path path;
public WeirdShape() {
path = new Path();
border.setColor (COLOUR);
border.setStyle (Paint.Style.FILL);
border.setStrokeWidth(STROKE_WIDTH);
border.setAntiAlias (true);
border.setDither (true);
border.setStrokeJoin (Paint.Join.ROUND);
border.setStrokeCap (Paint.Cap.ROUND);
}
@Override
protected void onResize(float width, float height) {
super.onResize(width, height);
float dx = STROKE_WIDTH/2.0f;
float dy = STROKE_WIDTH/2.0f;
float x = dx;
float y = dy;
float w = width - dx;
float h = height - dy;
//RectF arc = new RectF(x,h-2*CORNER,x+2*CORNER,h);
path.reset();
path.moveTo(x + CORNER,y);
path.lineTo(w - CORNER,y);
path.lineTo(w,y + CORNER);
path.lineTo(w, h);
path.lineTo(x + CORNER,h);
// path.arcTo (arc,90.0f,90.0f);
path.lineTo(dx,h - CORNER);
path.lineTo(dx,y);//path.lineTo(dx,y + CORNER);
path.close();
}
@Override
public void draw(Canvas canvas, Paint paint) {
// TODO Auto-generated method stub
canvas.drawPath(path,border);
}
}
然后使用ShapeDrawable中的自定义Shape作为背景Drawable:
view.setBackground(new ShapeDrawable(new WeirdShape()));
看起来像:
答案 1 :(得分:2)
您可以使用材料组件库提供的 function func(x, n) {
if (n == 1) {
return x;
} else {
let function_returned = func(x, n - 1);
console.log(x, "*", function_returned, "=", x*function_returned)
return x * function_returned
}
}
console.log(func(2, 4));
:
ShapeAppearanceModel
具有:
<LinearLayout
android:id="@+id/layout"
..>