效果如上, 這是ListView的一個item 左邊是一個圓角矩形的背景. 使用glide加載圖片html
自定義一個FilletImageView, 代碼以下:android
import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Xfermode; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.ImageView; /** * Created by Administrator on 2016/8/19. */ public class FilletImageView extends ImageView { private Rect rect = new Rect(); private RectF rectF = new RectF(); private float radius; private Bitmap bitmap; private Xfermode xfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN); public FilletImageView(Context context) { this(context, null); } public FilletImageView(Context context, AttributeSet attrs) { super(context, attrs); radius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()); try { if(android.os.Build.VERSION.SDK_INT >= 11) { setLayerType(LAYER_TYPE_SOFTWARE, null); } } catch (Exception e) { e.printStackTrace(); } } @Override public void setImageBitmap(Bitmap bm) { this.bitmap = bm; } @Override protected void onDraw(Canvas canvas) { if (bitmap == null) return; rect.set(0,0,getWidth(),getHeight()); rectF.set(rect); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setAntiAlias(true); canvas.drawRoundRect(rectF, radius, radius, paint); paint.setXfermode(xfermode); canvas.drawBitmap(bitmap, null, rect, paint); } }
而後在加載的時候列表項太多, 第一次沒有顯示出圖像, 解決方法:在glide將圖像下載成功後再加載. 代碼以下:
canvas
好了, 一次能夠所有顯示了app
參考:
http://blog.csdn.net/zz7zz7zz/article/details/11495517
http://www.cnblogs.com/zhaoyanjun/p/5404162.htmlide