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

android自定义ImageView仿图片上传示例,第1张

概述看下效果图主要看下自定义view代码publicclassProcessImageViewextendsImageView{privateContextcontext;

看下效果图

主要看下自定义view 代码@H_301_8@

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,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,getWIDth(),getHeight()-getHeight()*progress/100,paint); //这里getWIDth() 获取的是image对象宽高度 xml值*2      paint.setcolor(color.parsecolor("#00000000"));// 全透明     canvas.drawRect(0,getHeight() - getHeight() * progress / 100,getHeight(),paint);      if(!flag){       paint.setTextSize(30);       paint.setcolor(color.parsecolor("#FFFFFF"));       paint.setstrokeWIDth(2);       Rect rect = new Rect();       paint.getTextBounds("100%","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();   } } 

里面代码很详细了。@H_301_8@

然后看下 Activity代码@H_301_8@

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代码。@H_301_8@

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

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

绘制中分为三部分,@H_301_8@

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

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

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

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

paint.setAntiAlias(true); //消除锯齿     paint.setStyle(Paint.Style.FILL); //设置paint为实心, Paint.Style.stroke为空心     paint.setcolor(color.parsecolor("#70000000")); //设置为半透明     canvas.drawRect(0,paint);  

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

paint.setcolor(color.parsecolor("#00000000"));// 全透明     canvas.drawRect(0,paint); 

第三部分动态改变字符串@H_301_8@

if(!flag){       paint.setTextSize(30);       paint.setcolor(color.parsecolor("#FFFFFF"));       paint.setstrokeWIDth(2);       Rect rect = new Rect();       paint.getTextBounds("100%",paint);     } 

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

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

总结

以上是内存溢出为你收集整理的android自定义ImageView仿图片上传示例全部内容,希望文章能够帮你解决android自定义ImageView仿图片上传示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存