안 드 로 이 드 사용자 정의 지우개 효과

4418 단어 Android지우개
이 사례 는 안 드 로 이 드 사용자 정의 지우개 효 과 를 공유 하고 베 어 셀 곡선 처리 곡선 전환 부 를 사용 합 니 다.

public class picFingerToTest extends View {

  private Paint paint;
  private Bitmap decodeResourceSRC;
  private Bitmap createBitmapDST;
  //     ,       
  private Path path;
  private float perX;
  private float perY;

  public picFingerToTest(Context context, AttributeSet attrs) {
    super(context, attrs);
    // 1、        
    setLayerType(View.LAYER_TYPE_SOFTWARE, null);

    // 2、      
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(45);

    // 3、         
    //  
    decodeResourceSRC = BitmapFactory.decodeResource(getResources(), R.drawable.welcome, null);
    //   
    createBitmapDST = Bitmap.createBitmap(decodeResourceSRC.getWidth(), decodeResourceSRC.getHeight(),
        Config.ARGB_8888);
    path = new Path();

  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //     
    int saveLayer = canvas.saveLayer(0, 0, getWidth(), getHeight(), null,Canvas.ALL_SAVE_FLAG);

    //             
    Canvas canvas2 = new Canvas(createBitmapDST);
    canvas2.drawPath(path, paint);

    //           
    canvas.drawBitmap(createBitmapDST, 0, 0, paint);

    //        

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
    canvas.drawBitmap(decodeResourceSRC, 0, 0, paint);

    paint.setXfermode(null);
    canvas.restoreToCount(saveLayer);

  }

  //       ,       
  @Override
  public boolean onTouchEvent(MotionEvent event) {

    switch (event.getAction()) {
    //             
    case MotionEvent.ACTION_DOWN:

      path.moveTo(event.getX(), event.getY());

      perX = event.getX();
      perY = event.getY();

      return true;

    case MotionEvent.ACTION_MOVE:

      float endX = (perX + event.getX()) / 2;
      float endY = (perY + event.getY()) / 2;

      path.quadTo(perX, perY, endX, endY);
      perX = event.getX();
      perY = event.getY();
      postInvalidate();

      break;
    case MotionEvent.ACTION_UP:

      break;

    default:
      break;
    }

    return super.onTouchEvent(event);
  }

}

안 드 로 이 드 지우개 그림 기능

public void onCreate() {
  //    
  ImageView ivTop = (ImageView) findViewByid(R.id.iv_top);
 
  Options opts = new Options(); //     ,          ,     
  opts.inSampleSize = 2; //               2/1     
  //      ,decodeResource            RGB(red,green,blue),ARGB(alpha,red,green,blue)
  Bitmap topImage = BitmapFactory.decodeResources( getResource(),R.drawable.top, opts);
 
  //        ,            :ARGB
  Bitmap blank = Bitmap.createBitmap(topImage.getWidth(), topImage.getHeight, Config.ARGB_4444);
 
  //    topImage       
  Canvas canvas = new Canvas(blank);
  // topImage               ARGB()
  canvas.drawBitmap(topImage, 0, 0, null);
  ivTop.setImageBitmap(blank);
}
 
class MyOnTouchListoner implements OnTouchListener {
 
  @Override pulic boolean OnTouch(View v, MotionEvent event) {
    //        
    if (event.getAction() == MotionEvent.ACTION_MOVE) {
      //      
      int x = (int) event.getX();
      int y = (int) event.getY();
 
      for (int i = x - 10; i < x + 10; i++) {
        for (int j = y - 10; j < y + 10; j++) {
          //      
          if (j >= 0 && blank.getHeight() && i >= 0 && i < blank.getWidth()) {
            blank.setPixel(i, j, Color.TRANSPARENT);
          }
        }
      }
      //         ImageView
      ivTop.setImageBitmap(blank);
    }
 
    return true; //true          .false    
  }
 
}

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기