请教各位大牛,BlurMaskFilter怎么实现图像的模糊?要成功的方法,自己试过不好使。用其他的方法实现也行,关键是要快,自己写的速度太慢了,拜托。

解决方案 »

  1.   

    改下package 名 并运行这个activity就可以了
    这个是来自apidemo中的例子            mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
                mPaint.setMaskFilter(mBlur);
    个人感觉以上两行代码基本上就是BlurMaskFilter的应用 然后画mPaint就可以实现mBlur 设置的效果了package com.k;import android.app.Activity;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BlurMaskFilter;
    import android.graphics.Canvas;
    import android.graphics.MaskFilter;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import android.view.View;public class Vi extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new MyView(this));
        }
        public class MyView extends View {
         private Paint       mPaint;
         private MaskFilter  mBlur;
            
            private Bitmap  mBitmap;
            private Canvas  mCanvas;
            private Path    mPath;
            private Paint   mBitmapPaint;
            
            public MyView(Context c) {
                super(c);
                mPaint = new Paint();
                mPaint.setAntiAlias(true);
                mPaint.setDither(true);
                mPaint.setColor(0xFFFF0000);
                mPaint.setStyle(Paint.Style.STROKE);
                mPaint.setStrokeJoin(Paint.Join.ROUND);
                mPaint.setStrokeCap(Paint.Cap.ROUND);
                mPaint.setStrokeWidth(12);
                mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
                mPaint.setMaskFilter(mBlur);
                mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
                mCanvas = new Canvas(mBitmap);
                mPath = new Path();
                mBitmapPaint = new Paint(Paint.DITHER_FLAG);
            }        @Override
            protected void onSizeChanged(int w, int h, int oldw, int oldh) {
                super.onSizeChanged(w, h, oldw, oldh);
            }
            
            @Override
            protected void onDraw(Canvas canvas) {
                canvas.drawColor(0xFFAAAAAA);
                
                canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
                
                canvas.drawPath(mPath, mPaint);
            }
            
            private float mX, mY;
            private static final float TOUCH_TOLERANCE = 4;
            
            private void touch_start(float x, float y) {
                mPath.reset();
                mPath.moveTo(x, y);
                mX = x;
                mY = y;
            }
            private void touch_move(float x, float y) {
                float dx = Math.abs(x - mX);
                float dy = Math.abs(y - mY);
                if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
                    mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
                    mX = x;
                    mY = y;
                }
            }
            private void touch_up() {
                mPath.lineTo(mX, mY);
                // commit the path to our offscreen
                mCanvas.drawPath(mPath, mPaint);
                // kill this so we don't double draw
                mPath.reset();
            }
            
            @Override
            public boolean onTouchEvent(MotionEvent event) {
                float x = event.getX();
                float y = event.getY();
                
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        touch_start(x, y);
                        invalidate();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        touch_move(x, y);
                        invalidate();
                        break;
                    case MotionEvent.ACTION_UP:
                        touch_up();
                        invalidate();
                        break;
                }
                return true;
            }
        }
    }