Android 如何绘制一个平滑的位图路径,没有任何中断

Android 如何绘制一个平滑的位图路径,没有任何中断,android,bitmap,android-canvas,Android,Bitmap,Android Canvas,我正在绘制一个应用程序,我想画一个位图的路径 我的代码是: private void oncanvas初始化(){ //主_活动.paintButton.setEnabled(真); mPaint=新油漆(); BlurMaskFilter bmf=新的BlurMaskFilter(2,Blur.OUTER); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setFilterBitmap(true); mPaint.setC

我正在绘制一个应用程序,我想画一个位图的路径 我的代码是:

private void oncanvas初始化(){
//主_活动.paintButton.setEnabled(真);
mPaint=新油漆();
BlurMaskFilter bmf=新的BlurMaskFilter(2,Blur.OUTER);
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setFilterBitmap(true);
mPaint.setColor(主活动.颜色变换器);
mCanvas=新画布();
mPath=新路径();
mPaint.setStyle(油漆、样式、笔划);
mPaint.setMaskFilter(bmf);
mPaint.setStrokeJoin(油漆.连接.圆形);
mPaint.setStrokeCap(油漆盖圆形);
mPaint.setAlpha(255);
bmp=Bitmap.createScaledBitmap(bmp,30,30,false);
bmp=bmp.copy(Config.ARGB_8888,true);
}
@凌驾
已更改尺寸的受保护空心(整数w、整数h、整数oldw、整数oldh){
super.onSizeChanged(w,h,oldw,oldh);
mBitmap=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
mCanvas=新画布(mBitmap);
}
公共布尔onTouch(视图arg0,运动事件){
float x=event.getX();
float y=event.getY();
如果(真)
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
触摸启动(x,y);
使无效();
打破
case MotionEvent.ACTION\u移动:
触摸移动(x,y);
使无效();
打破
case MotionEvent.ACTION\u UP:
润色;
使无效();
打破
}
返回true;
}
专用无效触摸启动(浮动x、浮动y){
Random rand=新的Random();
float r=rand.nextFloat();
float g=rand.nextFloat();
float b=rand.nextFloat();
随机rnd=新随机();
mPaint.setColor(Color.rgb(rnd.nextInt(256))和rnd.nextInt(256),
nextInt(256));
mPath.reset();
移动到(x,y)的速度;
mX=x;
mY=y;
}
私有无效触摸移动(浮动x、浮动y){
float dx=Math.abs(x-mX);
float dy=Math.abs(y-mY);
如果(dx>=接触公差| | dy>=接触公差){
//兆帕四分之一秒(mX,mY,(x+mX)/2,(y+mY)/2);
mX=x;
mY=y;
arrX[i]=mX;
arrY[我]=我的;
i++;
}
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
对于(int k=0;k}
为什么在每种情况下都调用invalidate()方法:,尝试在切换时调用它

例如

public boolean onTouch(View arg0, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        if (true)
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                touch_start(x, y);
                break;
            case MotionEvent.ACTION_MOVE:
                touch_move(x, y);                   
                break;
            case MotionEvent.ACTION_UP:
                touch_up();
                break;
            }
          invalidate();
        return true;
    }

好吧……但这不会改变任何事情