最近公司的项目中要求加入新浪微博中查看微博详情的功能,看了看新浪微博客户端有个效果挺不错的,就是在图片显示之前会有一张默认的图片,会随着加载进度的增加默认图片有种慢慢装满水的效果,如下:
以前也看到过这种效果,一直没有时间弄,这次正好项目中要用到就研究了一下实现。
开始认为的作法是要改变图片Alpha值,方法行不通。研究了一番,可以自定义ImageView,在onDraw方法中可以使用canvas.drawRect(rect, paint),问题是怎么获取默认图片的绘制区域也就是Rect,Rect rect = canvas.getClipBounds()方法可以获取到图片的裁剪区域,另外rect.top和rect.bottom可以获取到矩形区域的顶部和底部位置,程序中我测试了一下,rect.top为0,rect.bottom为图片的高度,可以通过改变rect.top的值来控制所绘矩形的高度,下面附上我写demo:
package com.loading;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.ImageView;
public class LoadingImageView extends ImageView {
public LoadingImageView(Context context) {
super(context);
}
public LoadingImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public LoadingImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
int i = 210;
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.GREEN);
Rect rect = canvas.getClipBounds();
rect.top += i;
System.out.println(rect.bottom + "---" + rect.top);
canvas.drawRect(rect, paint);
i -= 10;
if (i >= 0) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
mHandler.sendEmptyMessage(1);
}
}).start();
}
super.onDraw(canvas);
}
Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
invalidate();
}
};
}
根据下载的进度来确定所画矩形的高度可以动态的控制rect.top的值。

楼主,有没有demo啊?
demo没有了哦,这上面是核心代码,相信你回做出来的