實現直播帶貨系統開發通知欄顯示下載圖片的進度條
直播帶貨系統開發實現通知欄顯示下載圖片的進度條具體程式碼如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.acer_pc.progresscontent.MainActivity"> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="點選下載" /> <ImageView android:id="@+id/iview" android:layout_below="@id/btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.acer_pc.progresscontent.MainActivity">
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="點選下載" />
<ImageView
android:id="@+id/iview"
android:layout_below="@id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
</RelativeLayout>
在activity中我已經添加了詳細的註解,程式碼如下:
package com.example.acer_pc.progresscontent; import android.app.Notification; import android.app.NotificationManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import com.squareup.okhttp.Call; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import com.squareup.okhttp.ResponseBody; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; public class MainActivity extends AppCompatActivity { //圖片的下載路徑 private String path = "http://p3.so.qhmsg.com/t016f0540122dbc10c3.jpg"; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bitmap bitmap = (Bitmap) msg.obj; //讓進度條載入完成後自動消失 manager.cancel(3); //為imageview設定圖片資源 imageView.setImageBitmap(bitmap); } }; private Button button; private ImageView imageView; private NotificationManager manager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查詢控制元件 button = (Button) findViewById(R.id.btn); imageView = (ImageView) findViewById(R.id.iview); //建立notify管理者物件 manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //button按鈕的點選事件,當點選button按鈕的時候進行進度條的顯示,並下載圖片 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //呼叫方法 init(); } }); } private void init() { //建立notification builder 物件 final Notification.Builder mbuilder = new Notification.Builder(this); //設定通知欄圖示 mbuilder.setSmallIcon(android.R.mipmap.sym_def_app_icon); //設定通知欄提示語 mbuilder.setContentText("正在下載"); //建立OkHttpClient物件 OkHttpClient client = new OkHttpClient(); //建立請求物件的建造者 final Request.Builder builder = new Request.Builder(); //新增下載路徑 builder.url(path); //通過建造者物件,建立請求物件 Request request = builder.build(); //建立call物件 Call call = client.newCall(request); call.enqueue(new Callback() { @Override //請求失敗時呼叫的方法 public void onFailure(Request request, IOException e) { } @Override //請求響應成功時呼叫的方法 public void onResponse(Response response) throws IOException { //建立一個變數記錄下載了的總的大小 int download = 0; //獲取響應物件 ResponseBody body = response.body(); //獲取網路請求的最大值 int length = (int) body.contentLength(); //獲取資料流 InputStream inputStream = body.byteStream(); //建立一個位元組陣列輸出流 ByteArrayOutputStream bos = new ByteArrayOutputStream(); int len = 0; byte[] bytes = new byte[1024]; while ((len = inputStream.read(bytes)) != -1) { download += len; mbuilder.setProgress(100, ((int) download / length * 100), false); manager.notify(3, mbuilder.build()); bos.write(bytes, 0, bytes.length); bos.flush(); } //將位元組陣列輸出流轉換成bitmap物件 byte[] bytes1 = bos.toByteArray(); Bitmap bitmap = BitmapFactory.decodeByteArray(bytes1, 0, bytes1.length); if (bitmap != null) { Message message = handler.obtainMessage(); message.obj = bitmap; handler.sendMessage(message); } } }); } }
package com.example.acer_pc.progresscontent;
import android.app.Notification;
import android.app.NotificationManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
//圖片的下載路徑
private String path = "http://p3.so.qhmsg.com/t016f0540122dbc10c3.jpg";
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap bitmap = (Bitmap) msg.obj;
//讓進度條載入完成後自動消失
manager.cancel(3);
//為imageview設定圖片資源
imageView.setImageBitmap(bitmap);
}
};
private Button button;
private ImageView imageView;
private NotificationManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//查詢控制元件
button = (Button) findViewById(R.id.btn);
imageView = (ImageView) findViewById(R.id.iview);
//建立notify管理者物件
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//button按鈕的點選事件,當點選button按鈕的時候進行進度條的顯示,並下載圖片
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//呼叫方法
init();
}
});
}
private void init() {
//建立notification builder 物件
final Notification.Builder mbuilder = new Notification.Builder(this);
//設定通知欄圖示
mbuilder.setSmallIcon(android.R.mipmap.sym_def_app_icon);
//設定通知欄提示語
mbuilder.setContentText("正在下載");
//建立OkHttpClient物件
OkHttpClient client = new OkHttpClient();
//建立請求物件的建造者
final Request.Builder builder = new Request.Builder();
//新增下載路徑
builder.url(path);
//通過建造者物件,建立請求物件
Request request = builder.build();
//建立call物件
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
//請求失敗時呼叫的方法
public void onFailure(Request request, IOException e) {
}
@Override
//請求響應成功時呼叫的方法
public void onResponse(Response response) throws IOException {
//建立一個變數記錄下載了的總的大小
int download = 0;
//獲取響應物件
ResponseBody body = response.body();
//獲取網路請求的最大值
int length = (int) body.contentLength();
//獲取資料流
InputStream inputStream = body.byteStream();
//建立一個位元組陣列輸出流
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len = inputStream.read(bytes)) != -1) {
download += len;
mbuilder.setProgress(100, ((int) download / length * 100), false);
manager.notify(3, mbuilder.build());
bos.write(bytes, 0, bytes.length);
bos.flush();
}
//將位元組陣列輸出流轉換成bitmap物件
byte[] bytes1 = bos.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes1, 0, bytes1.length);
if (bitmap != null) {
Message message = handler.obtainMessage();
message.obj = bitmap;
handler.sendMessage(message);
}
}
});
}
}
以上就是 直播帶貨系統開發實現通知欄顯示下載圖片的進度條,更多內容歡迎關注之後的文章