android 画布高,android – 如何在画布上绘制很多具有良好性能的矩形?

你现在遇到的主要问题基本上就是你执行了大量的绘图周期(等于你拥有的Rect数),最好将所有这些rects存储在

Path对象中,以减少绘制周期数.由于您有三种座位状态,我建议创建三个路径.我建议做这样的事情:

private void init() {

mSelectedPath = new Path();

mAvailablePath = new Path();

mUnavalablePath = new Path();

mAvailablePaint = new Paint();

mSelectedPaint = new Paint();

mUnavalablePaint = new Paint();

mUnavalablePaint.setColor(Color.RED);

mSelectedPaint.setColor(Color.YELLOW);

mAvailablePaint.setColor(Color.GREEN);

for (EventPlace place : mData) {

if (place.isSelected())

mSelectedPath.addRect(rectF, Path.Direction.CW);

else if (place.isAvailable())

mAvailablePath.addRect(rectF, Path.Direction.CW);

else

mUnavalablePath.addRect(rectF, Path.Direction.CW);

}

}

然后,当您想要将日期与此视图关联时,您应该执行以下操作:

public void setData(List data) {

mData = data;

init();

invalidate();

}

实际上你可以随心所欲地做到这一点,记住你必须调用init方法然后失效.在onDraw中:

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

canvas.save();

canvas.scale(mScaleFactor, mScaleFactor); // scaling support

canvas.translate(mTranslateX, mTranslateY); // scrolling support

canvas.drawPath(mAvailablePath, mAvailablePaint);

canvas.drawPath(mUnavalablePath, mUnavalablePaint);

canvas.drawPath(mSelectedPath, mSelectedPaint);

canvas.restore();

}

也许您还想添加一些逻辑来排除那些目前在路径中不可见的Rect,以便调整性能.

我尝试在Rects的测试集上动画我的方法,并且它运行顺利,200个rects,我没有尝试执行严重的基准测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值