著论准过秦,作赋拟子虚。这篇文章主要讲述android自定义ImageView仿图片上传相关的知识,希望能为你提供帮助。
文章图片
Activity代码
1 public class MainActivity extends AppCompatActivity { 2 ProcessImageView processImageView =null; 3 int progress=0; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 processImageView=(ProcessImageView) findViewById(R.id.image); 11 //模拟图片上传进度 12 new Thread(new Runnable() { 13 @Override 14 public void run() { 15 while (true){ 16 if(progress==100){//图片上传完成 17 return; 18 } 19 progress++; 20 processImageView.setProgress(progress); 21 try{ 22 Thread.sleep(200); //暂停0.2秒 23 } catch (InterruptedException e){ 24 e.printStackTrace(); 25 } 26 } 27 } 28 }).start(); 29 } 30 }
【android自定义ImageView仿图片上传】自定义view
1 public class ProcessImageView extends ImageView{ 2 private Context context; 3 private Paint paint; 4 private LogUtil log=LogUtil.getInstance(); 5 int progress = 0; 6 private boolean flag; 7 8 public ProcessImageView(Context context) { 9 super(context); 10 } 11 12 public ProcessImageView(Context context, AttributeSet attrs) { 13 this(context, attrs,0); 14 } 15 16 public ProcessImageView(Context context, AttributeSet attrs, int defStyleAttr) { 17 super(context, attrs, defStyleAttr); 18 this.context=context; 19 paint=new Paint(); 20 } 21 22 @Override 23 protected void onDraw(Canvas canvas) { 24 super.onDraw(canvas); 25 paint.setAntiAlias(true); //消除锯齿 26 paint.setStyle(Paint.Style.FILL); //设置paint为实心, Paint.Style.STROKE为空心 27 paint.setColor(Color.parseColor("#70000000")); //设置为半透明 28 canvas.drawRect(0,0,getWidth(),getHeight()-getHeight()*progress/100,paint); //这里getWidth() 获取的是image对象宽高度 xml值*2 29 30 paint.setColor(Color.parseColor("#00000000")); // 全透明 31 canvas.drawRect(0, getHeight() - getHeight() * progress / 100, 32 getWidth(), getHeight(), paint); 33 34 if(!flag){ 35 paint.setTextSize(30); 36 paint.setColor(Color.parseColor("#FFFFFF")); 37 paint.setStrokeWidth(2); 38 Rect rect = new Rect(); 39 paint.getTextBounds("100%", 0, "100%".length(), rect); // 确定文字的宽度 40 canvas.drawText(progress + "%", getWidth() / 2 - rect.width() / 2, 41 getHeight() / 2, paint); 42 } 43 } 44 45 public void setProgress(int progress) { 46 this.progress = progress; 47 if(progress==100){ 48 flag=true; 49 } 50 postInvalidate(); 51 } 52 }
看下自定义view 类,主要onDraw()方法中.
绘制中分为三部分,
第一部分为上部分半透明区域
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);
第三部分就是中间的progress值变化
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); }
推荐阅读
- H5游戏和手游APP的差异在哪里()
- 如何在Python中暴力破解ZIP文件密码(代码实现教程)
- 如何在Python中破解PDF文件(详细实现教程)
- 如何在Python中构建SQL注入扫描器(代码实现指南)
- 如何在Python中进行SYN泛洪攻击(代码实现指南)
- 如何在Python中提取Chrome密码(代码实现指南)
- 如何在Python中使用Shodan API(代码实现)
- 如何在Python中创建HTTP代理(代码示例)
- 如何在Python中提取Chrome Cookie(详细实现)