2014-03-01 3 views
0
 public static Bitmap getRoundedShape(Bitmap scaleBitmapImage,int width) { 
    int targetWidth = width; 
    int targetHeight = width; 
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
         targetHeight,Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(targetBitmap); 
    Path path = new Path(); 
    path.addCircle(((float) targetWidth - 1)/2, 
     ((float) targetHeight - 1)/2, 
     (Math.min(((float) targetWidth), 
     ((float) targetHeight))/2), 
     Path.Direction.CCW); 
    canvas.clipPath(path); 
    Bitmap sourceBitmap = scaleBitmapImage; 
    canvas.drawBitmap(sourceBitmap, 
     new Rect(0, 0, sourceBitmap.getWidth(), 
     sourceBitmap.getHeight()), 
     new Rect(0, 0, targetWidth, targetHeight), null); 
    return targetBitmap; 
} 
나는 원형 이미지 뷰를 얻기 위해이 작업을 수행

,이 그림처럼 주위에 원형 테두리를 추가 할 수있는 방법은 매우 흥미로운 게시물은 이것에 대해이 http://i.stack.imgur.com/x8PhM.png안드로이드 원형 국경 주변에 원형 이미지

답변

2

기능 : http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/ Romain Guy (Google의 앤드 로이드 팀)이 씁니다.

다음과 같이 사용할 수 있습니다. 이 예제는 흰색 선이있는 원형 비트 맵을 만듭니다. 검은 선으로 흰색 선을 추가하여이를 변경할 수 있습니다.

public class CircleDrawable extends Drawable { 

    private final BitmapShader mBitmapShader; 
    private final Paint mPaint; 
    private Paint mWhitePaint; 
    int circleCenterX; 
    int circleCenterY; 
    int mRadus; 
    private boolean mUseStroke = false; 
    private int mStrokePadding = 0; 

    public CircleDrawable(Bitmap bitmap) { 

     mBitmapShader = new BitmapShader(bitmap, 
       Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 

     mPaint = new Paint(); 
     mPaint.setAntiAlias(true); 
     mPaint.setShader(mBitmapShader); 

    } 

    public CircleDrawable(Bitmap bitmap, boolean mUseStroke) { 
     this(bitmap); 

     if (mUseStroke) { 
      this.mUseStroke = true; 
      mStrokePadding = 4; 
      mWhitePaint = new Paint(); 
      mWhitePaint.setStyle(Paint.Style.FILL_AND_STROKE); 
      mWhitePaint.setStrokeWidth(0.75f); 
      mWhitePaint.setColor(Color.WHITE); 
     } 
    } 

    @Override 
    protected void onBoundsChange(Rect bounds) { 
     super.onBoundsChange(bounds); 
     circleCenterX = bounds.width()/2; 
     circleCenterY = bounds.height()/2; 

     if (bounds.width() >= bounds.height()) 
      mRadus = bounds.width()/2; 
     else 
      mRadus = bounds.height()/2; 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     if (mUseStroke) { 
      canvas.drawCircle(circleCenterX, circleCenterY, mRadus, mWhitePaint); 
     } 
     canvas.drawCircle(circleCenterX, circleCenterY, mRadus - mStrokePadding, mPaint); 
    } 

    @Override 
    public int getOpacity() { 
     return PixelFormat.TRANSLUCENT; 
    } 

    @Override 
    public void setAlpha(int alpha) { 
     mPaint.setAlpha(alpha); 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
     mPaint.setColorFilter(cf); 
    } 

    public boolean ismUseStroke() { 
     return mUseStroke; 
    } 

    public void setmUseStroke(boolean mUseStroke) { 
     this.mUseStroke = mUseStroke; 
    } 

}