android自定義ImageView仿圖片上傳

来源:http://www.cnblogs.com/ganchuanpu/archive/2017/04/21/6745560.html
-Advertisement-
Play Games

Activity代碼 自定義view 看下自定義view 類,主要onDraw()方法中. 繪製中分為三部分, 第一部分為上部分半透明區域 第二部分為下部分全透明區域 第三部分就是中間的progress值變化 ...


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 }  

 

自定義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);  
} 

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這一次是針對Android開發中的一個小問題,許可權獲取的問題。 ...
  • 原作者再舉一例子,說明在Kotlin中怎使用Java使用過的相同庫:Retrofit。 ...
  • 這次給大家介紹兩個比較好用的提示插件,如成功、等待、錯誤提示。 準備: 1、新建一個Prism Xamarin.Forms項目; 2、右擊解決方案,添加NuGet包: 1)Acr.UserDialogs(全部安裝); 2)AndHUD(安卓項目安裝),BTProgressHUD(iOS項目安裝); ...
  • 項目開發中在所難免的要對獲取到的數據進行模型嵌套分析,一層兩層還好,但是多了,對於一些初學者,就會很頭疼。 今天我們說一下如何利用 YYModel 來解析嵌套模型,以省市區為例: 1.先對模型嵌套分析: 假設我們最初拿到的數據是一個裝著省模型(provinceModel)的字典數組,裡面有:省名字 ...
  • 談到設置圓角頭像的問題,我想大多數人第一反應想到的是設置圖像的 layer let imageV: UIImageView = UIImageView() imageV.layer.cornerRadius = 26 imageV.layer.masksToBounds = true 這是一種方式, ...
  • 最近在Android和IOS上都需要對用戶的某些輸入進行簡單的加密,於是採用MD5加密方式。 首先將目的字元串加密一次,獲得32位字元串 然後將32位字元串拆為2段,分別加密1次 最後將加密後的2段拼接,加密100次 下麵是Android的Java部分和IOS的Objective C部分 impor ...
  • 轉載請註明出處 http://www.cnblogs.com/cnwutianhao/p/6746981.html 前幾天客戶提需求,對App增加一個功能,這個功能目前市面上已經很常見,那就是應用內切換語言。啥意思,就是 英、中、法、德、日。。。語言隨意切換。 (本案例採用Data-Bingding ...
  • 關於三個構造函數使用時機的說法 也就是說,系統預設只會調用Custom View的前兩個構造函數,至於第三個構造函數的調用,通常是我們自己在構造函數中主動調用的(例如,在第二個構造函數中調用第三個構造函數). ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...