文档章节

自定义View实现图片上传进度显示

Spoon2014
 Spoon2014
发布于 2015/06/01 09:42
字数 343
阅读 21
收藏 0

转载请注明:Android开发中文站 » 安卓自定义View实现图片上传进度显示(仿QQ)

demo下载地址:http://download.csdn.net/detail/baiyuliang2013/8690773

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

public class UpProView extends View {

	private Paint mPaint;// 画笔

	int width, height;

	Context context;

	int progress = 0;

	public UpProView(Context context) {
		this(context, null);
	}

	public UpProView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public UpProView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		this.context = context;
		mPaint = new Paint();
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		mPaint.setAntiAlias(true); // 消除锯齿
		mPaint.setStyle(Paint.Style.FILL);

		mPaint.setColor(Color.parseColor("#70000000"));// 半透明
		canvas.drawRect(0, 0, getWidth(), getHeight() - getHeight() * progress
				/ 100, mPaint);

		mPaint.setColor(Color.parseColor("#00000000"));// 全透明
		canvas.drawRect(0, getHeight() - getHeight() * progress / 100,
				getWidth(), getHeight(), mPaint);

		mPaint.setTextSize(30);
		mPaint.setColor(Color.parseColor("#FFFFFF"));
		mPaint.setStrokeWidth(2);
		Rect rect = new Rect();
		mPaint.getTextBounds("100%", 0, "100%".length(), rect);// 确定文字的宽度
		canvas.drawText(progress + "%", getWidth() / 2 - rect.width() / 2,
				getHeight() / 2, mPaint);

	}

	/**
	 * 更新进度
	 * 
	 * @param progress
	 */
	public void setProgress(int progress) {
		this.progress = progress;
		postInvalidate();
	};

}
public class MainActivity extends Activity {

	UpProView customView = null;
	private final int SUCCESS = 0;
	int progress = 0;

	Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case SUCCESS:
				Toast.makeText(MainActivity.this, "图片上传完成", Toast.LENGTH_SHORT)
						.show();
				customView.setVisibility(View.GONE);
				break;
			}
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		customView = (UpProView) findViewById(R.id.customView);
		// 模拟图片上传进度
		new Thread(new Runnable() {
			@Override
			public void run() {
				for (int i = 0; i < 100; i++) {
					customView.setProgress(i);
					try {
						Thread.sleep(200); // 暂停0.2秒
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				handler.sendEmptyMessage(SUCCESS);
			}
		}).start();
	}
}
<FrameLayout
        android:layout_width="150dp"
        android:layout_height="200dp" >

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/byl" />

        <com.xr.uppro.UpProView
            android:id="@+id/customView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    </FrameLayout>


本文转载自:http://www.androidchina.net/2426.html

上一篇: NetworkUtils
Spoon2014
粉丝 0
博文 47
码字总数 12039
作品 0
太原
程序员
私信 提问
自定义view控件效果实现及实践

项目需求讨论 - Android 自定义 Dialog 实现步骤及封装 根据实际项目需求出发。因为项目中的对话框要配合整个项目的 UI 风格,所以进行自定义 Dialog 的实现步骤,及最后写封装类。来快速实现...

掘金官方
2017/12/11
0
0
warkiz/IndicatorSeekBar

IndicatorSeekBar EnglishReadme here 自定义SeekBar, 能改变尺寸、颜色、滑块(thumb)图片、刻度(tick)图片、刻度文字(text)和气泡指示器(indicator),当滑动时显示带有进度的指示器。 欢迎 ...

warkiz
2017/12/21
0
0
几款极好的 JavaScript 文件上传插件

jQuery File Uploader 这是最受欢迎的 jQuery 文件上传组件,支持批量上传,拖放上传,显示上传进度条以及校验功能。 支持预览图片、音频和视频,支持跨域上传和客户端图片缩放,支持的服务端...

hoojo
2013/09/26
0
0
基于uploadify.js实现多文件上传和上传进度条的显示

  uploadify是JQuery的一个插件,主要实现文件的异步上传功能,可以自定义文件大小限制、文件类型、是否自动上传等属性,可以显示上传的进度条。官网地址是http://www.uploadify.com/,进入...

雲霏霏
2014/12/08
0
0
MVC5:使用Ajax和HTML5实现文件上传功能

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能。 基本功能:实现带有进度...

柠檬酷
2015/11/23
92
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
47分钟前
112
7
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
2
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部