全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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./201701/yuanma/ProcessImageDemo_jb51.rar

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


# android  # 上传图片  # android图片上传  # ImageView图片上传  # Android自定义ImageView实现自动放大缩小动画  # Android自定义圆角ImageView控件  # Android 自定义imageview实现图片缩放实例详解  # Android自定义控件之圆形、圆角ImageView  # Android自定义GestureDetector实现手势ImageView  # Android自定义ImageView实现在图片上添加图层效果  # Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码  # Android 自定义圆形头像CircleImageView支持加载网络图片的实现代码  # Android自定义圆角ImageView  # Android布局自定义Shap圆形ImageView可以单独设置背景与图片  # Android编程实现自定义ImageView圆图功能的方法  # 自定义  # 全透明  # 设置为  # 中分  # 画出  # 图片上传  # 的是  # 有个  # 第一个  # 可以看到  # 详细介绍  # 第二部  # 每隔  # 先看  # 第一部分  # 图中  # 第二部分  # 大家多多  # 为上  # 类中 


相关文章: c++怎么用jemalloc c++替换默认内存分配器【性能】  如何通过虚拟主机空间快速建站?  建站之星安装路径如何正确选择及配置?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何通过商城自助建站源码实现零基础高效建站?  济南企业网站制作公司,济南社保单位网上缴费步骤?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何获取开源自助建站系统免费下载链接?  南宁网站建设制作定制,南宁网站建设可以定制吗?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何用AWS免费套餐快速搭建高效网站?  无锡营销型网站制作公司,无锡网选车牌流程?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何破解联通资金短缺导致的基站建设难题?  存储型VPS适合搭建中小型网站吗?  制作门户网站的参考文献在哪,小说网站怎么建立?  长沙做网站要多少钱,长沙国安网络怎么样?  青岛网站建设如何选择本地服务器?  如何零基础开发自助建站系统?完整教程解析  威客平台建站流程解析:高效搭建教程与设计优化方案  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  建站之星安装后界面空白如何解决?  太原网站制作公司有哪些,网约车营运证查询官网?  网站按钮制作软件,如何实现网页中按钮的自动点击?  相册网站制作软件,图片上的网址怎么复制?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  如何在IIS中新建站点并解决端口绑定冲突?  表情包在线制作网站免费,表情包怎么弄?  海南网站制作公司有哪些,海口网是哪家的?  Thinkphp 中 distinct 的用法解析  装修招标网站设计制作流程,装修招标流程?  如何配置支付宝与微信支付功能?  建站之星代理如何优化在线客服效率?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  网站制作公司排行榜,四大门户网站排名?  如何快速查询域名建站关键信息?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何通过云梦建站系统实现SEO快速优化?  建站之星安装后如何自定义网站颜色与字体?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  制作公司内部网站有哪些,内网如何建网站?  公司网站设计制作厂家,怎么创建自己的一个网站?  常州自助建站工具推荐:低成本搭建与模板选择技巧 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。