自学Android已有半年的时间,自己目前刚刚过了门槛,所以想通过写一点自己平时学习到的东西来提高自己,希望大牛们能够指出我的问题,谢谢!
今天写的这篇文章来自博客上一位大神的博客,根据自己的理解以及整合过后拿来和大家分享,先让大家看看实现后的效果图
实现的思路如下:(此处需要对自定义View的onDraw()方法进行三方面的绘制)
1.照片上半部分的半透明区域
2.照片下半部分的全透明区域
3.照片正中间部分的上传百分比文字区域
对应的onDraw()方法如下:
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
init();
mPaint.setColor(Color.parseColor("#70000000"));// 半透明
canvas.drawRect(0, 0, getWidth(), getHeight() - getHeight() * mProgress
/ 100, mPaint);// 绘制上半部分的半透明矩形区域(左上,右下,画笔)
mPaint.setColor(Color.parseColor("#00000000"));// 全透明
canvas.drawRect(0, getHeight() - getHeight() * mProgress / 100,
getWidth(), getHeight(), mPaint);// 绘制下半部分的全透明矩形区域
mPaint.setTextSize(45);
mPaint.setColor(Color.parseColor("#ffffff"));
mPaint.setStrokeWidth(2);
Rect rect = new Rect();
mPaint.getTextBounds("100%", 0, "100%".length(), rect);// 确定文字区域
canvas.drawText(mProgress + "%", getWidth() / 2 - rect.width() / 2,
getHeight() / 2, mPaint);//绘制中间上传百分比文字
}
public void setProgress(int progress) {
this.mProgress = progress;
postInvalidate();//刷新界面,重新运行onDraw()方法
}
此时onDraw()方法里面的逻辑已经全部处理完毕,下面介绍Activity里面的代码,先贴出布局代码
<span style="font-size:12px;color:#000000;"><FrameLayout
android:layout_width="200dp"
android:layout_height="300dp"
android:layout_gravity="center"
android:layout_marginTop="30dp" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/kobe" />
<com.mushroomliu.view.CustomView
android:id="@+id/customView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout></span>
在Activity中通过起一个子线程来模拟图片上传的进度
<span style="font-size:12px;color:#333333;"> private CustomView mCustomView;
private int mProgress;//上传进度
private final static int SUCCESS = 1;//上传成功的标识
private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
showLog(UploadActivity.this, "图片上传完成", 0);
mCustomView.setVisibility(View.GONE);
break;
default:
break;
}
}
};</span>
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (mProgress == 100) {
mHandler.sendEmptyMessage(SUCCESS);
break;
}
mProgress++;
mCustomView.setProgress(mProgress);
try {
Thread.sleep(200);//每隔2秒进度加1
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
基本流程和代码已经都写完了,今天是第一次发博客,在Android的道路上我还是一只小小鸟,希望能够通过与大家的交流来提高自己的水平共同进步,最后也希望大神能够指出我的错误与不足,谢谢大家!
源码下载地址:http://download.csdn.net/detail/mushroomliuqy/9472740