Qualcuno sa come ritagliare un'immagine \ bitmap in una cerchia? Non riesco a trovare alcuna soluzione, scusa ..Ritaglia immagine come cerchio in Android
risposta
Prova con codice qui sotto:
public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
// TODO Auto-generated method stub
int targetWidth = 50;
int targetHeight = 50;
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;
}
Non funziona. Per favore suggeriscimi – Arun
Classe:
public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
int targetWidth = 50;
int targetHeight = 50;
Bitmap targetBitmap = Bitmap.createBitmap(targetWidth,
targetHeight,Bitmap.Config.ARGB_8888);
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;
}
Vista:
<ImageView
android:id="@+id/imgView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/btnEdit"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:background="@drawable/rounded"
android:adjustViewBounds="true"
android:gravity="center"
android:src="@drawable/happy"/>
stili supplementari:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/white" />
<stroke
android:width="3dip"
android:color="#FF0000" />
<corners android:radius="10dp" />
<padding
android:bottom="0dp"
android:left="0dp"
android:right="0dp"
android:top="0dp" />
Romain Guy, ex ingegnere del team di Android di Google, ha pubblicato un eccellente articolo sul drawing images with rounded corners. Questa idea potrebbe essere facilmente estesa a un cerchio, ad esempio, modificando il raggio del rettangolo arrotondato in modo da creare un cerchio completo.
Dall'articolo:
Per generare le immagini arrotondati ho semplicemente scritto una consuetudine
Drawable
che disegna un rettangolo arrotondato conCanvas.drawRoundRect()
. Il trucco è per utilizzare unoPaint
con unBitmapShader
per riempire il rettangolo arrotondato con una trama anziché un colore semplice. Ecco ciò che il codice è simile:BitmapShader shader; shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); Paint paint = new Paint(); paint.setAntiAlias(true); paint.setShader(shader); RectF rect = new RectF(0.0f, 0.0f, width, height); // rect contains the bounds of the shape // radius is the radius in pixels of the rounded corners // paint contains the shader that will texture the shape canvas.drawRoundRect(rect, radius, radius, paint);
Canvas espone anche un metodo [drawCircle] (http://developer.android.com/reference/android/graphics/Canvas.html) che potrebbe essere più appropriato per questo caso. – greg7gkb
finalBitmapShader shader = newBitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(shader);
mBitmapWidth=mBitmap.getWidth();
mBitmapHeight=mBitmap.getHeight();
}
@Override
public void draw(Canvas canvas{
canvas.drawOval(mRectF,mPaint);
}
@Override
protected void onBoundsChange(Rect bounds) {
super.onBoundsChange(bounds);
mRectF.set(bounds);
}
qui ho trovato un tutorial di esempio di esso a http://androidgreeve.blogspot.in/2014/09/facebook-messanger-like-profile-image.html?m=1
Wiseman Designs, hanno un ImageView circolare open source pronto per l'uso
https://github.com/wisemandesigns/CircularImageView
Questo utilizza XML nei layout, che rende la vita più facile. È possibile impostare la fonte in XML o con alcune modifiche minori potrebbe facilmente utilizzare una bitmap.
Disclaimer: io lavoro per Wiseman Design
Per avere angoli arrotondati per ImageView, convertire l'immagine in bitmap e quindi provare seguente codice:
private Bitmap getRoundedCroppedBitmap(Bitmap bitmap) {
int widthLight = bitmap.getWidth();
int heightLight = bitmap.getHeight();
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Paint paintColor = new Paint();
paintColor.setFlags(Paint.ANTI_ALIAS_FLAG);
RectF rectF = new RectF(new Rect(0, 0, widthLight, heightLight));
canvas.drawRoundRect(rectF, widthLight/2 ,heightLight/2,paintColor);
Paint paintImage = new Paint();
paintImage.setXfermode(new PorterDuffXfermode(Mode.SRC_ATOP));
canvas.drawBitmap(bitmap, 0, 0, paintImage);
return output;
}
@ user1281750 leggere questione dettaglio esattamente! Non è duplicato come! –
possibile duplicato di [Ritaglio area circolare da bitmap in Android] (http://stackoverflow.com/questions/11932805/cropping-circular-area-from-bitmap-in-android) – Adinia