93 lines
2.9 KiB
Java
93 lines
2.9 KiB
Java
package com.uiui.aios.view;
|
|
|
|
import android.content.Context;
|
|
import android.content.res.TypedArray;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Paint;
|
|
import android.graphics.PaintFlagsDrawFilter;
|
|
import android.graphics.Path;
|
|
import android.graphics.RectF;
|
|
import android.util.AttributeSet;
|
|
|
|
import com.uiui.aios.R;
|
|
|
|
import cn.jzvd.JzvdStd;
|
|
|
|
public class JzvdStdRound extends JzvdStd {
|
|
|
|
private int radius;
|
|
private int leftTopRadius;
|
|
private int rightTopRadius;
|
|
private int rightBottomRadius;
|
|
private int leftBottomRadius;
|
|
|
|
public JzvdStdRound(Context context) {
|
|
super(context);
|
|
}
|
|
public JzvdStdRound(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
initAttrs(context, attrs);
|
|
}
|
|
|
|
@Override
|
|
public int getLayoutId() {
|
|
return R.layout.layout_jzstd_notitle;
|
|
}
|
|
|
|
void initAttrs(Context context, AttributeSet attrs) {
|
|
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.JzvdStdRound);
|
|
radius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_radius, 0);
|
|
leftTopRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_left_top_radius, 0);
|
|
rightTopRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_right_top_radius, 0);
|
|
rightBottomRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_right_bottom_radius, 0);
|
|
leftBottomRadius = a.getDimensionPixelSize(R.styleable.JzvdStdRound_left_bottom_radius, 0);
|
|
}
|
|
|
|
|
|
public void setRadius(int radius){
|
|
this.radius = radius;
|
|
invalidate();
|
|
}
|
|
|
|
public void setLeftTopRadius(int leftTopRadius) {
|
|
this.leftTopRadius = leftTopRadius;
|
|
invalidate();
|
|
}
|
|
|
|
|
|
public void setRightTopRadius(int rightTopRadius) {
|
|
this.rightTopRadius = rightTopRadius;
|
|
invalidate();
|
|
}
|
|
|
|
|
|
public void setRightBottomRadius(int rightBottomRadius) {
|
|
this.rightBottomRadius = rightBottomRadius;
|
|
invalidate();
|
|
}
|
|
|
|
public void setLeftBottomRadius(int leftBottomRadius) {
|
|
this.leftBottomRadius = leftBottomRadius;
|
|
invalidate();
|
|
}
|
|
|
|
@Override
|
|
protected void dispatchDraw(Canvas canvas) {
|
|
Path path = new Path();
|
|
if (radius > 0) {
|
|
path.addRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()),
|
|
radius, radius, Path.Direction.CW);
|
|
} else {
|
|
path.addRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()),
|
|
new float[]{leftTopRadius, leftTopRadius, rightTopRadius, rightTopRadius,
|
|
rightBottomRadius, rightBottomRadius, leftBottomRadius, leftBottomRadius},
|
|
Path.Direction.CW);
|
|
canvas.setDrawFilter(new PaintFlagsDrawFilter(0,
|
|
Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
|
|
}
|
|
canvas.clipPath(path);
|
|
super.dispatchDraw(canvas);
|
|
}
|
|
}
|
|
|