deal border

This commit is contained in:
pengfei.zhou 2019-08-01 17:59:33 +08:00
parent 796de55cc4
commit c4672fc0af
3 changed files with 46 additions and 19 deletions

View File

@ -5,7 +5,6 @@ import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Region;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
@ -20,13 +19,11 @@ import android.widget.FrameLayout;
* @CreateDate: 2019-07-31
*/
public class DoricLayer extends FrameLayout {
private int mBorderWidth;
private int mBorderColor = Color.BLACK;
private int mCornerRadius;
private Path mCornerPath = new Path();
private Paint shadowPaint = new Paint();
private Paint mBorderPaint;
public DoricLayer(@NonNull Context context) {
super(context);
@ -48,9 +45,11 @@ public class DoricLayer extends FrameLayout {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// draw shadow
canvas.save();
canvas.restore();
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
}
@Override
@ -58,12 +57,26 @@ public class DoricLayer extends FrameLayout {
return super.drawChild(canvas, child, drawingTime);
}
public void setBorderWidth(int borderWidth) {
this.mBorderWidth = borderWidth;
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
// draw border
if (mBorderPaint != null) {
canvas.drawRect(0, 0, getWidth(), getHeight(), mBorderPaint);
}
}
public void setBorderColor(int borderColor) {
this.mBorderColor = borderColor;
public void setBorder(int borderWidth, int borderColor) {
if (borderWidth == 0) {
mBorderPaint = null;
}
if (mBorderPaint == null) {
mBorderPaint = new Paint();
mBorderPaint.setAntiAlias(true);
mBorderPaint.setStyle(Paint.Style.STROKE);
}
mBorderPaint.setStrokeWidth(borderWidth);
mBorderPaint.setColor(borderColor);
}
public void setCornerRadius(int corner) {

View File

@ -49,19 +49,22 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
if (mView == null) {
mView = build(jsObject);
}
for (String prop : jsObject.propertySet()) {
blend(mView, layoutParams, prop, jsObject.getProperty(prop));
}
if (getView() == null) {
doricLayer = new DoricLayer(getContext());
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(layoutParams.width, layoutParams.height);
doricLayer.addView(mView, params);
} else {
}
for (String prop : jsObject.propertySet()) {
blend(mView, layoutParams, prop, jsObject.getProperty(prop));
}
ViewGroup.LayoutParams params = mView.getLayoutParams();
if (params != null) {
params.width = layoutParams.width;
params.height = layoutParams.height;
mView.setLayoutParams(params);
} else {
params = layoutParams;
}
mView.setLayoutParams(params);
}
protected void blend(T view, ViewGroup.LayoutParams layoutParams, String name, JSValue prop) {
@ -109,6 +112,12 @@ public abstract class ViewNode<T extends View> extends DoricContextHolder {
mParent.blendChild(this, prop.asObject());
}
break;
case "border":
if (prop.isObject() && doricLayer != null) {
doricLayer.setBorder(DoricUtils.dp2px(prop.asObject().getProperty("width").asNumber().toFloat()),
prop.asObject().getProperty("color").asNumber().toInt());
}
break;
default:
break;
}

View File

@ -20,6 +20,10 @@ class CounterView extends ViewHolder {
}
this.counter = new Text
this.counter.text = "点击计数"
this.counter.border = {
width: 1,
color: Color.parse('#000000'),
}
this.counter.textSize = 20
vlayout.space = 20
@ -28,7 +32,7 @@ class CounterView extends ViewHolder {
}
vlayout.addChild(this.number)
vlayout.addChild(this.counter)
root.bgColor = Color.parse('#00ff00')
// root.bgColor = Color.parse('#00ff00')
vlayout.bgColor = Color.parse('#ff00ff')
root.addChild(vlayout)
}
@ -51,6 +55,7 @@ class CounterVM extends ViewModel<CountModel, CounterView> {
})
}
}
@Entry
class MyPage extends VMPanel<CountModel, CounterView>{
getVMClass() {
@ -374,7 +379,7 @@ class SnakeVM extends ViewModel<SnakeModel, SnakeView>{
}
}
}
@Entry
class SnakePanel extends VMPanel<SnakeModel, SnakeView>{
getVMClass() {