在activity里怎样实现手写功能

解决方案 »

  1.   

    我用C自己实现了一个。NDK方式。目前正在考虑如何保存笔迹。不知道除了这种方式还有什么方式。
    楼上说的如何实现呢?
      

  2.   

    什么意思?Activity, 里面用editText填充不就可以了。
      

  3.   

    楼主的意思是要用做类似写字板的功能吧?  
    这个要自定义一个个view,在onTouch时去画path~
      

  4.   

    这样应该可以:
    package com.clwork.fingerpaint;import android.content.Context;  
    import android.graphics.Bitmap;  
    import android.graphics.Canvas;  
    import android.graphics.Paint;  
    import android.graphics.Path;  
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.MotionEvent;  
    import android.view.View;  
    import android.view.WindowManager;
    public class DemoPath extends View {  
        private float mX , mY;  
        private Path mPath;  
        private Paint mPaint;  
        private static final float TOUCH_TOLERANCE = 4;  
        private Bitmap  mBitmap;  
        private Canvas  mCanvas;  
        private Paint   mBitmapPaint;  
        Context mContext ; 
        public DemoPath(Context c) {  
            super(c);  
              
            mPaint = new Paint();   
            mPaint.setAntiAlias(true);   
            mPaint.setDither(true);   
            mPaint.setColor(0xff000000);  
            mPaint.setStyle(Paint.Style.STROKE);
            mPaint.setStrokeJoin(Paint.Join.MITER);  
            mPaint.setStrokeCap(Paint.Cap.ROUND);        
            mPaint.setStrokeWidth(3);        
            
           mBitmap = Bitmap.createBitmap(320, 240, Bitmap.Config.ARGB_8888);   
            mCanvas = new Canvas(mBitmap);   
            mPath = new Path();   
            mBitmapPaint = new Paint(Paint.DITHER_FLAG);  
        }  
        @Override  
        protected void onDraw(Canvas canvas) {  
            canvas.drawColor(0xFFAAAAAA);  
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);  
            canvas.drawPath(mPath, mPaint);  
            super.onDraw(canvas);  
        }  
        private void onTouchDown(float x , float y){  
            mPath.reset();   
            mPath.moveTo(x, y);  
            mX = x;  
           mY = y;  
        }  
        private void onTouchMove(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 onTouchUp(float x , float y){  
            mPath.lineTo(mX, mY);   
             mCanvas.drawPath(mPath, mPaint);
            mPath.reset();  
        }  
        @Override  
        public boolean onTouchEvent(MotionEvent event) {  
            float x = event.getX();  
            float y = event.getY();  
            switch (event.getAction()) {  
            case MotionEvent.ACTION_DOWN:  
                onTouchDown(x , y);  
                invalidate();  
                break;  
            case MotionEvent.ACTION_MOVE:   
                onTouchMove(x , y);  
                invalidate();  
                break;  
            case MotionEvent.ACTION_UP:  
                onTouchUp(x , y);  
                invalidate();  
                break;  
            default:  
                break;  
            }  
            return true;  
        }  
    } 主activity:
    package com.clwork.fingerpaint;import android.app.Activity;  
    import android.os.Bundle;  
    public class DemoViewPath extends Activity {  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            DemoPath dp = new DemoPath(this);  
            setContentView(dp);  
            super.onCreate(savedInstanceState);  
        }  
    }