2016-12-12 5 views
3

enter image description here Pinch IN-OUT 줌 및 원형 자르기 이미지로 사용자 정의 ImageView를 만듭니다. 핀치 인 아웃은 훌륭하지만 이미지 자르기를 시도 할 때 particulr 원 화상을 얻을 수 없습니다. 캔버스 클래스를 기반으로 onTuchListener 및 Circular Cropping을 기반으로 Pinch in-out 작업을 사용하고 있습니다. 자르기에 대한
캔버스 원형 이미지를 사용하여 특정 자르기 이미지를 얻는 방법은 무엇입니까?

@Override 
    protected void onDraw(Canvas canvas) { 
     onDrawReady = true; 
     imageRenderedAtLeastOnce = true; 
     if (delayedZoomVariables != null) { 
      setZoom(delayedZoomVariables.scale, delayedZoomVariables.focusX, delayedZoomVariables.focusY, delayedZoomVariables.scaleType); 
      delayedZoomVariables = null; 
     } 
     super.onDraw(canvas); 

     if (bitmap == null) { 
      circleWindowFrame(); //Creating circle view 
     } 
     canvas.drawBitmap(bitmap, 0, 0, null); 
    } 

    protected void circleWindowFrame() { 
     bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas osCanvas = new Canvas(bitmap); 

     RectF outerRectangle = new RectF(0, 0, bitmap.getWidth(), bitmap.getHeight()); 

     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(getResources().getColor(R.color.overlay)); 
     paint.setAlpha(99); 
     osCanvas.drawRect(outerRectangle, paint); 

     paint.setColor(Color.TRANSPARENT); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT)); 
     float centerX = getWidth()/2; 
     float centerY = getHeight()/2; 

     DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
     int width = metrics.widthPixels; 
     float radius = width/2; 
     osCanvas.drawCircle(centerX, centerY, radius, paint); 
    } 

이 코드 :

전에서 아웃 및 원형 이미지 자르기 핀치에 대해 언급 한 코드 아래에 사용한 ... 사전에

public static Bitmap getCrop() { 
     Bitmap circleBitmap; 
     circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
     Paint paint = new Paint(); 
     paint.setShader(shader); 
     paint.setAntiAlias(true); 
     Canvas c = new Canvas(circleBitmap); 
     c.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, bitmap.getWidth()/2, paint); 
     return bitmap; 
    } 

감사

+0

https://github.com/vinc3m1/RoundedImageView 순환 이미지에이 라이브러리 사용 –

+0

아니요, 원형 자르기 이미지가 필요합니다. ** 첨부 된 이미지를 참조하십시오. ** –

+0

내 대답을 확인 했습니까 –

답변

1

시도해보기

public static Bitmap toOvalBitmap(@NonNull Bitmap bitmap) { 
     int width = bitmap.getWidth(); 
     int height = bitmap.getHeight(); 
     Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

     Canvas canvas = new Canvas(output); 

     int color = 0xff424242; 
     Paint paint = new Paint(); 

     paint.setAntiAlias(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 

     RectF rect = new RectF(0, 0, width, height); 
     canvas.drawOval(rect, paint); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, 0, 0, paint); 

     bitmap.recycle(); 

     return output; 
    } 
+0

내가 선택한 오버레이 원형 영역을 잘라야합니다. **하지만 당신의 예제는 전체 이미지 자르기입니다. ** –

+0

당신의 getCrop() 메소드 대신에 내 메소드를 사용 했습니까? –

+0

귀하의 질문에 당신이 제대로 자르기하지 않는다고 말했어, 나는 자르기 방법을 사용했다. 그래서 나는 당신이 당신의 방법이 이미지의 원하는 오버레이 영역을 잘라내는 사실을 감안할 때 당신에게 도움이 될 것이라고 생각한다. –