Tôi mới dùng android dev và tôi đã cố gắng thêm vài giờ để thêm các góc tròn đẹp và mượt mà vào ImageView mà không thành công. Điều đầu tiên tôi đã thử chỉ đơn giản là làm tròn các góc của hình ảnh trực tiếp, nhưng điều này có nghĩa là thay đổi bitmap, và vì tôi cần giữ lại hình ảnh thô, và chúng khá lớn, điều này không thực sự thân thiện với bộ nhớ. Điều này cũng sẽ gây ra những khó khăn khác vì ImageView của tôi là chất lỏng.Góc được làm tròn thiên văn trên Android ImageView
Điều thứ hai tôi đã cố gắng sử dụng là phương pháp clipPath sau khi phân lớp chế độ xem của tôi. Điều này hoạt động, nhưng các góc được đặt bí danh. Sau đó tôi đã thử thêm một PaintFlagsDrawFilter để thực hiện các răng cưa, nhưng điều này đã không làm việc. Tôi đang sử dụng monodroid, và tôi đã tự hỏi điều này được cho là làm việc trong Java.
Đây là mã của tôi (C#):
public class MyImageView : ImageView
{
private float[] roundedCorner;
/**
* Contains the rounded corners for the view.
* You can define one, four or height values.
* This behaves as the css border-radius property
*
* @see http://developer.android.com/reference/android/graphics/Path.html#addRoundRect(android.graphics.RectF, float[], android.graphics.Path.Direction)
*/
public float[] RoundedCorners{
get{
return roundedCorner;
}
set{
float[] finalValue = new float[8];
int i=0;
if(value.Length == 1){
for(i=0; i<8;i++){
finalValue[i] = value[0];
}
}else if(value.Length == 4){
for(i=0; i<4;i++){
finalValue[2*i] = value[i];
finalValue[2*i+1] = value[i];
}
}
roundedCorner = finalValue;
}
}
public SquareImageView (Context context) :
base (context)
{
Initialize();
}
public SquareImageView (Context context, IAttributeSet attrs) :
base (context, attrs)
{
Initialize();
}
private void Initialize()
{
RoundedCorners = new float[]{0,0,0,0};
}
public override void Draw (Android.Graphics.Canvas canvas)
{
Path path = new Path();
path.AddRoundRect(new RectF(0,0, Width,Height),RoundedCorners, Path.Direction.Cw);
canvas.ClipPath(path);
base.Draw (canvas);
}
/**
* try to add antialiasing.
*/
protected override void DispatchDraw (Canvas canvas)
{
canvas.DrawFilter = new PaintFlagsDrawFilter((PaintFlags)1, PaintFlags.AntiAlias);
base.DispatchDraw (canvas);
}
}
Nhờ sự giúp đỡ của bạn!
Cảm ơn câu trả lời của bạn. Nhưng như tôi đã nói, tôi đã cố gắng làm tròn các góc của hình ảnh của mình, nhưng vì tôi cần một bitmap có kích thước chất lỏng, điều này ngụ ý giữ một tham chiếu đến ảnh gốc, và tôi muốn tránh điều này. Về cơ bản tôi muốn làm tròn các góc của chính nó, như thể tôi đang sử dụng giải pháp này: [link] (http://stackoverflow.com/questions/1683185/android-listview-with-rounded-corners) –
Okay @Alex xem [link] này (http://stackoverflow.com/questions/6539781/android-imageview-with-rounded-corners-not-working) –