2 yajun soft yajun_soft 于 2012.12.19 17:00 提问

android 在 view 里我使用一个 自定义的 canvas 画图 出现问题

在 view 里我使用一个 自定义 canvas 画图。先在 canvas 里画出背景, 再画出几个图片。
背景是一个张图片。当触发 onTouchEvent 后,图片移动 canvas 重画背景画出来会有图片移动的痕迹。
如果背景指定了一个颜色就不会有这样的问题。 怎么解决?

    canvas = new Canvas(bgbitmap);

绘制背景:

canvas.drawColor(selectedColor);

如果用 drawBitmap 绘制背景会有问题

//                     canvas.drawBitmap(bgbitmap, 0, 0, null);

// 绘制 图片
                    for (int i = fbmpCount - 1; i >= 0; i--) {
                        FreeBitmap fb = findFreeBmpByPriority(i);
                        if (fb != null)
                            this.canvas.drawBitmap(fb.getBmp(), fb.getXpoint(), fb.getYpoint(),
                                    null);
                    }

        this.invalidate();

// onDraw 方法。
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawBitmap(bgbitmap, 0, 0, null);
    }

2个回答

sasuke38
sasuke38   2012.12.20 11:11
已采纳
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.Config;
    import android.graphics.Canvas;
    import android.view.View;

    public class MyView extends View{

        private Bitmap background;

        public MyView(Context context) {
            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFFFFFFFF);
            if(null==background){
                background=Bitmap.createBitmap(bigBitmap.getWidth(), bigBitmap.getHeight(), Config.ARGB_8888);
                Canvas c=new Canvas(background);
                c.drawBitmap(bigBitmap, 0, 0, null);
                c.save(Canvas.ALL_SAVE_FLAG);
            }
            canvas.drawBitmap(background, 0, 0, null);
            canvas.drawBitmap(smallBitmap, x, y, null);
        }

    }
ce_la_vie
ce_la_vie   2012.12.20 11:31

我认为你应该在重新画之前清空一下画布:

Canvas.drawColor(Color.WHITE)

试试可不可以

sasuke38
sasuke38 我也这么认为的
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!