Android 안드로이드2014. 11. 24. 14:18

















public class CustomView extends View {

private Path drawPath;


  //커스텀뷰를 만들 때 Paint 객체는 두개가 필요하다.

  //하나는 drawBitmap()함수에 인자로 넣는 mBitmapPaint.

  //두번째는 나머지 모든 그릴 위치에 쓰일 drawPaint다.

private Paint drawPaint, mBitmapPaint;  //커스텀뷰를 만들 때 Paint 객체는 두개가 필요하다.

private Canvas mCanvas;

private Bitmap mBitmap;

int iDisplayWidth, iDisplayHeight;

public MemoingView(Context context, AttributeSet attrs){

   super(context, attrs);    

      

//현재 화면의 크기를 구할 때 사용

   Display display=((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

   iDisplayWidth = display.getWidth();

   iDisplayHeight = display.getHeight();

   

   

    drawPath = new Path();

   

    drawPaint = new Paint();    

    drawPaint.setAntiAlias(true);

    drawPaint.setColor(0xffff0000);

    drawPaint.setStyle(Paint.Style.STROKE);

    drawPaint.setStrokeJoin(Paint.Join.ROUND);

    drawPaint.setStrokeCap(Paint.Cap.ROUND);

   

    mBitmapPaint = new Paint(Paint.DITHER_FLAG);

 

    mBitmap = Bitmap.createBitmap(iDisplayWidth, iDisplayHeight, Bitmap.Config.ARGB_8888);

    mCanvas = new Canvas(mBitmap);

}


    

    @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.drawBitmap(mBitmap, 0, 0, mBitmapPaint);    

    canvas.drawPath(drawPath, drawPaint);

 

    }    

    

    @Override

    public boolean onTouchEvent(MotionEvent event) {

    float touchX = event.getX();

    float touchY = event.getY();

   

    switch (event.getAction()) {

    case MotionEvent.ACTION_DOWN:

       drawPath.moveTo(touchX, touchY);

       break;

    case MotionEvent.ACTION_MOVE:

       drawPath.lineTo(touchX, touchY);

       break;

    case MotionEvent.ACTION_UP:

    drawPath.lineTo(touchX, touchY);

       mCanvas.drawPath(drawPath, drawPaint);

       drawPath.reset();

       break;

    default:

       return false;

    }

   

    invalidate();

    return true;

    }





Posted by 코드버무려