android – 如何覆盖onDraw,以便我将绘制的内容(作为位图)转换并转换它?

android – 如何覆盖onDraw,以便我将绘制的内容(作为位图)转换并转换它?,第1张

概述下面的方法有效,但不幸的是,这种方法涉及创建整个屏幕大小的位图 – 而不仅仅是绘制的区域.如果我使用它来绘制UI元素,则会为每个UI元素重新绘制它.这可以更有效地完成吗? @Overrideprotected void onDraw(Canvas canvas) { //TODO: Reduce the burden from multiple drawing Bitmap bi 下面的方法有效,但不幸的是,这种方法涉及创建整个屏幕大小的位图 – 而不仅仅是绘制的区域.如果我使用它来绘制UI元素,则会为每个UI元素重新绘制它.这可以更有效地完成吗?
@OverrIDeprotected voID onDraw(Canvas canvas) {    //Todo: Reduce the burden from multiple drawing    Bitmap bitmap=Bitmap.createBitmap(canvas.getWIDth(),canvas.getHeight(),Config.ARGB_8888);    Canvas offscreen=new Canvas(bitmap);    super.onDraw(offscreen);    //Then draw onscreen    Paint p=new Paint();    p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));    canvas.drawBitmap(bitmap,p);}
解决方法 您是否尝试更改您创建的位图的大小,仅等于剪辑边界而不是给定画布的整个大小?我不知道所有视图是否都是这种情况,但是我发现某些视图的onDraw方法被赋予了与屏幕一样大的画布,而不管内容的实际大小.然后剪切画布,将其限制在左上角,然后绘制,然后将该部分转换为屏幕上的其他位置,当它实际上准备好显示整个布局时.换句话说,尽管它的画布大小与整个屏幕相同,但它实际上只使用了一小块.所以你可以尝试做的不是使用
Bitmap bitmap = Bitmap.createBitmap(canvas.getWIDth(),...)

你可以试试

Rect rect = canvas.getClipBounds();int wIDth = rect.wIDth();int height = rect.height();Bitmap bitmap = Bitmap.createBitmap(wIDth,height,...);

这样,您可以减少使用比必要更大的位图的开销.注意:我实际上没有尝试这样做,所以它可能不起作用,但值得尝试.

总结

以上是内存溢出为你收集整理的android – 如何覆盖onDraw,以便我将绘制的内容(作为位图)转换并转换它?全部内容,希望文章能够帮你解决android – 如何覆盖onDraw,以便我将绘制的内容(作为位图)转换并转换它?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1137581.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存