android自定义ImageView仿图片上传示例

看下效果图

主要看下自定义view 代码

public class ProcessImageView extends ImageView{ private Context context; private Paint paint; private LogUtil log=LogUtil.getInstance(); int progress = 0; private boolean flag; public ProcessImageView(Context context) { super(context); } public ProcessImageView(Context context, AttributeSet attrs) { this(context, attrs,0); } public ProcessImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context=context; paint=new Paint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setAntiAlias(true); //消除锯齿 paint.setStyle(Paint.Style.FILL); //设置paint为实心, Paint.Style.STROKE为空心 paint.setColor(Color.parseColor("#70000000")); //设置为半透明 canvas.drawRect(0,0,getWidth(),getHeight()-getHeight()*progress/100,paint); //这里getWidth() 获取的是image对象宽高度 xml值*2 paint.setColor(Color.parseColor("#00000000"));// 全透明 canvas.drawRect(0, getHeight() - getHeight() * progress / 100, getWidth(), getHeight(), paint); if(!flag){ paint.setTextSize(30); paint.setColor(Color.parseColor("#FFFFFF")); paint.setStrokeWidth(2); Rect rect = new Rect(); paint.getTextBounds("100%", 0, "100%".length(), rect);// 确定文字的宽度 canvas.drawText(progress + "%", getWidth() / 2 - rect.width() / 2, getHeight() / 2, paint); } } public void setProgress(int progress) { this.progress = progress; if(progress==100){ flag=true; } postInvalidate(); } }

里面代码很详细了。

然后看下 Activity代码

public class MainActivity extends AppCompatActivity { ProcessImageView processImageView =null; int progress=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); processImageView=(ProcessImageView) findViewById(R.id.image); //模拟图片上传进度 new Thread(new Runnable() { @Override public void run() { while (true){ if(progress==100){//图片上传完成 return; } progress++; processImageView.setProgress(progress); try{ Thread.sleep(200); //暂停0.2秒 } catch (InterruptedException e){ e.printStackTrace(); } } } }).start(); } }

下面来详细介绍view代码。

首先从图中可以看到 中间有个参数变化,这个进度值不断变化,我们再activity 中使用了一个线程 ,每隔0.2 秒会增加progress这个值,然后通过 processImageView.setProgress(progress); 改变view类中 progress重绘制这个定义view.

然后看下自定义view 类,主要onDraw()方法中.

绘制中分为三部分,

第一部分为上部分半透明区域

第二部分为下部分全透明区域

第三部分就是中间的progress值变化

先看第一个部分画出上部分半透明,

paint.setAntiAlias(true); //消除锯齿 paint.setStyle(Paint.Style.FILL); //设置paint为实心, Paint.Style.STROKE为空心 paint.setColor(Color.parseColor("#70000000")); //设置为半透明 canvas.drawRect(0,0,getWidth(),getHeight()-getHeight()*progress/100,paint);

第二部分画出下面透明区域

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

第三部分动态改变字符串

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

源码地址 http://xiazai.jb51.net/201701/yuanma/ProcessImageDemo_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-10-02 18:03:13

android自定义ImageView仿图片上传示例的相关文章

ThinkPHP示例中心添加图片上传示例

ThinkPHP新添加了3.1版本的图片上传示例. 新版的上传类内部做了一些调整,实例化的参数也有所改变,目的是为了更加明确化. ThinkPHP示例之图片上传,包括图片上传.数据库保存.缩略图生成以及图片水印功能演示.首先需要下载框架核心,然后把示例解压到Web根目录下面,并修改入口文件中的框架入口文件的位置.导入示例目录下面的data.sql文件到你的数据库,或者执行SQL: CREATE&http://www.aliyun.com/zixun/aggregation/37954.html&q

Android 自定义imageview实现图片缩放实例详解

Android 自定义imageview实现图片缩放实例详解 觉得这个自定义的imageview很好用 性能不错  所以拿出来分享给大家  因为不会做gif图  所以项目效果 就不好贴出来了  把代码贴出来 1.项目结构图 2.Compat.class package com.suo.image; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.view.View; pu

Android拍照且将图片上传至服务器

MainActivity如下: package cc.cn; import java.io.File; import java.io.IOException; import cc.cn.UploadImageThread.UploadImageListener; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; im

PHP+Ajax无刷新带进度条图片上传示例

项目需求:1.PHP+Ajax无刷新带进度条图片上传,2.带进度条.所需插件:jquery.js,jquery.form.js. 最近在做一个手机web项目,需要用到Ajax上传功图片能,项目要求PHP无刷新上传图片,并且要带进度条,下面就来讲一下我的实现方法,先看效果图 本示例需要使用的是jquery.js,jquery.form.js,demo里面包含有,你可以在文章下方进行下载. 第一步,建立前端页面index.html 此段是前端展示内容,这里需要说明的是由于input:file标签显示

android中okhttp实现断点上传示例

前言 之前项目需要上传大文件的功能,上传大文件经常遇到上传一半由于网络或者其他一些原因上传失败.然后又得重新上传(很麻烦),所以就想能不能做个断点上传的功能.于是网上搜索,发现市面上很少有断点上传的案例,有找到一个案例也是采用SOCKET作为上传方式(大文件上传,不适合使用POST,GET形式).由于大文件夹不适合http上传的方式,所以就想能不能把大文件切割成n块小文件,然后上传这些小文件,所有小文件全部上传成功后再在服务器上进行拼接.这样不就可以实现断点上传,又解决了http不适合上传大文件

android 自定义ImageView实现图片手势滑动,多点触摸放大缩小效果

转自: http://blog.csdn.net/jj120522/article/details/8467810 首先呢,还是一贯作风,我们先来看看众多应用中的示例:(这种效果是很常见的,可以说应用的必须品.)                             搜狐客户端                                    百度新闻客户端                              新浪微博                              凤凰新

Android webview打开本地图片上传实现代码

Webview打开本地图片选择器十分之麻烦,其在安卓系统3x 4x 5x上的行为都不同,处理也不同,所以之前差点崩溃.经过测试和完善,最终其在各个版本上都能完美工作. 直接上代码 package com.testandroid.webview; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AlertDialog; imp

Android自定义ImageView实现在图片上添加图层效果_Android

首先我们先看下效果图 实现思路 这是两张前后对比图,右边第二张图里面的已抢光标签图片当已经没有商品的时候就会显示了,在每个图片的中心位置,第一想法是在ImageView的外层再套一层RelativeLayout 实现方法 <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <SelectableRoundedImageVi

Android图片上传实现预览效果_Android

首先具体分析一下,实现的功能,其中需求分析是必不可少的,需求.逻辑清除之后,再上手写代码,思路会很清晰. 1.多图上传首先得选择图片(这里项目需求是既可以拍照上传也可以从相册中选择) 2.拍照上传很简单了网上也有很多例子,调用照相机,返回uri,获取图片 3.从相册中选择图片  3.1 获取手机中的所有图片  3.2 将图片存到自定义图片数组中显示  3.3 自定义ViewPager浏览图片 主要的逻辑大体是这样,下面具体看一下实现: 一.首先看一下界面: <com.view.NoScrollG