日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 自定义图片上传,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);

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的android 自定义图片上传,android自定义ImageView仿图片上传示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。