画布上的位图画笔路径 - 不是平滑路径

时间:2015-09-22 12:57:42

标签: android bitmap android-canvas surfaceview

我正在尝试使用透明画布和surfaceView开发游戏,

  1. 我创建了一个屏幕大小的离屏位图(myCanvasBitmap)。

  2. 每次我为该位图创建一个新的Canvas。

  3. 我使用drawBitmap()。
  4. 在Bitmap上绘图
  5. 我使用drawBitmap()将位图复制到Surface。
  6. 问题在于,如果我画“快”(快速移动手指),线条不一致 - 圆形位图彼此相距太远。 但是当我绘制“慢”时,圆形位图很接近。

    快速: (OOOOO O__O______O_____________O_______________________ O)

    慢:(000OOOOOOOOOOOOOOOOOOOOOOOO0000OO) OOOOOOOOOO)

    我在这里阅读了一些帖子并意识到我应该以某种方式使用“drawPath”(能够完成并绘制2个位置之间的所有点,但问题是“drawPath”适用于我没有的油漆(我使用位图画笔。)

    有谁知道如何添加路径代码以使用我的SurfaceView程序并解决这个破解问题?

     public class SurfaceMyPaint extends SurfaceView implements Runnable 
      {
        Thread t;
        SurfaceHolder holder;
        Bitmap brush,myCanvasBitmap;
        boolean isItOk = false;
    
    public SurfaceMyPaint(Context context) 
    {
        super(context);
        holder = getHolder();
        initial();
    }
    
    public void initial() 
    {
        brush= BitmapFactory.decodeResource(getResources(), R.drawable.brush2);       
    }
    
    public boolean onTouchEvent(MotionEvent event) 
    {
        if(event.getAction()== MotionEvent.ACTION_DOWN)
        {            
           x= event.getX();
           y= event.getY();
        }
    
       if(event.getAction()== MotionEvent.ACTION_MOVE)
       {
         x = event.getX();
         y= event.getY();
       }
       return true;
    }
    
    
    public void run()
    {
        while (isItOk == true)
        {
        if (!holder.getSurface().isValid())
            continue;
        myCanvas_w = getWidth();
        myCanvas_h = getHeight();
        if (myCanvasBitmap== null)
        {myCanvasBitmap= Bitmap.createBitmap(myCanvas_w, myCanvas_h, Bitmap.Config.ARGB_8888);}
        Canvas c = new Canvas(myCanvasBitmap);
        canvas = holder.lockCanvas(null);
        c.drawBitmap(brush, x - (brush.getWidth() / 2), y - (brush.getWidth() / 2), null);
        canvas.drawBitmap(myCanvasBitmap, 0, 0, null);
        holder.unlockCanvasAndPost(canvas);
        }
    }}
    

0 个答案:

没有答案