ฉันได้ลองใช้วิธีแก้ปัญหาทั้งหมดข้างต้นแล้ว แต่ไม่มีวิธีใดที่ทำให้ฉันเปลี่ยนรูปวงกลมได้โดยไม่ต้องครอบตัดรูปภาพ .. วิธีแก้ปัญหานั้นจะใช้ได้กับภาพที่มีความกว้างและความสูงเท่ากันเท่านั้น. นี่คือคำตอบของฉันที่อยู่ด้านบน
อันดับแรก ------
Picasso.with(getActivity())
.load(url)
.error(R.drawable.image2)
.placeholder(R.drawable.ic_drawer)
.resize(200, 200)
.transform(new ImageTrans_CircleTransform())
.into(imageView1);
จากนั้นทำสิ่งนี้ --------
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Shader.TileMode;
import com.squareup.picasso.Transformation;
public class ImageTrans_CircleTransform implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
if (source == null || source.isRecycled()) {
return null;
}
final int width = source.getWidth() + borderwidth;
final int height = source.getHeight() + borderwidth;
Bitmap canvasBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
BitmapShader shader = new BitmapShader(source, TileMode.CLAMP, TileMode.CLAMP);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(shader);
Canvas canvas = new Canvas(canvasBitmap);
float radius = width > height ? ((float) height) / 2f : ((float) width) / 2f;
canvas.drawCircle(width / 2, height / 2, radius, paint);
//border code
paint.setShader(null);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(bordercolor);
paint.setStrokeWidth(borderwidth);
canvas.drawCircle(width / 2, height / 2, radius - borderwidth / 2, paint);
//--------------------------------------
if (canvasBitmap != source) {
source.recycle();
}
return canvasBitmap;
}
@Override
public String key() {
return "circle";
}
}