我想画一条比canvas.getMaximumBitmapWidth()
and/or canvas.getMaximumBitmapHeight()
在可缩放的视图内。
特别是在较旧的设备(Android 9 及更早版本)上,这会导致:
路径太大而无法渲染成纹理
or
形状太大而无法渲染为纹理(16388x16388,max=16384x16384)
添加到视图setLayerType(View.LAYER_TYPE_SOFTWARE, paint)
不绘制我的实际路径(如果小于最大位图大小),说明:
视图太大,无法放入绘图缓存,需要 12462208 字节,只有 2073600 可用
我试着玩canvas.setDensity()
, canvas.setMatrix()
, canvas.clipRect()
,但没有喜悦。
这是一个简单的 Activity,无法在旧设备上绘制路径:
public class myActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FrameLayout layout = findViewById(R.id.layout);
layout.addView(new BigPath(this));
}
class BigPath extends View {
Paint paint = new Paint();
Path path = new Path();
public BigPath(Context context) {
super(context);
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
path.lineTo(canvas.getMaximumBitmapWidth(), canvas.getMaximumBitmapHeight());
canvas.drawPath(path, paint);
}
}
}
也许可以以编程方式将路径分割成更小的部分,但我不知道如何做。请注意,我的实际路径是自动生成的,并且比简单的对角线更复杂,因此我不能提前手动分割它。
先缩小路径,然后放大生成的位图?
降低最终位图分辨率可能是一种选择,但最终具有原始路径大小,因为路径还与其他视图对齐。
如何绘制大于最大位图尺寸的路径?