yajun_soft
2012-12-19 09:00
采纳率: 100%
浏览 9.9k

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条回答 默认 最新

  • Jobernowl 2012-12-20 03: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 2012-12-20 03:31

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

    Canvas.drawColor(Color.WHITE)
    

    试试可不可以

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题