Afinal快速開發架構使用起來非常方便,下面將講解如何利用Afinal載入網狀圖片及下載檔案:
先看:
注意:使用Afinal前需添加Afinal的jar,可以在這裡下載:http://download.csdn.net/detail/baiyuliang2013/7313587
其中包括了Afinal的源碼和jar,使用時只需添加jar包即可,在學習階段也可以直接添加源碼到你的項目中,可以更深入的學習Afinal。
看代碼:
activit_main.xml:
<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" tools:context=".MainActivity" > <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下載" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/btn" android:text="進度:" /> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_centerHorizontal="true" android:src="@drawable/ic_launcher" /></RelativeLayout>
MainActivity.java:
package com.example.afinaltest;import java.io.File;import net.tsz.afinal.*;import net.tsz.afinal.annotation.view.ViewInject;import net.tsz.afinal.http.AjaxCallBack;import android.annotation.SuppressLint;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends FinalActivity {@ViewInject(id=R.id.img) ImageView img; TextView textView; Button btn;FinalBitmap finalBitMap=null;FinalHttp fh;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView=(TextView) findViewById(R.id.text);btn=(Button) findViewById(R.id.btn);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {String apkPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/qq.apk";File f = new File(apkPath);if (f.exists()) {f.delete();}fh=new FinalHttp();fh.download("http://gdown.baidu.com/data/wisegame/4ae6d2d7378e6cdf/QQ_122.apk",apkPath, new AjaxCallBack<File>() { @Overridepublic void onStart() {super.onStart();Toast.makeText(getApplicationContext(), "開始下載", Toast.LENGTH_SHORT).show();}@SuppressLint("DefaultLocale")@Overridepublic void onLoading(long count, long current) {super.onLoading(count, current);int progress=0;if (current != count && current != 0) {progress = (int) (current / (float) count * 100);} else {progress = 100;}textView.setText("進度:"+progress+"%");}@Overridepublic void onSuccess(File t) {super.onSuccess(t);Toast.makeText(getApplicationContext(), "下載完成", Toast.LENGTH_SHORT).show();textView.setText(t==null?"null":t.getAbsoluteFile().toString());}@Overridepublic void onFailure(Throwable t, int errorNo,String strMsg) {super.onFailure(t, errorNo, strMsg);Toast.makeText(getApplicationContext(), "下載失敗", Toast.LENGTH_SHORT).show();}});}});finalBitMap=FinalBitmap.create(MainActivity.this);finalBitMap.display(img, "http://meme.zenfs.com/u/a33312d2e9eaa443321f4ec716fe795a23c27c89.jpeg");}}可以看到,MainActivity是繼承了FianlActivity,因此在初始化控制項的時候,可以不用findViewById了,直接用註解的方式如:@ViewInject(id=R.id.img) ImageView img; @ViewInject(id=R.id.btn,click="onclick") Button btn;click事件只需寫一個對應click="onclick"的方法如:public void onclick(){}即可。
分析FinallyBitmap源碼可知:初始化時需調用create方法,然後再調用display(imgView,url);即可載入網狀圖片,也可以設定在載入完成前顯示的圖片等等,這個看下原始碼便知,下載檔案需用FinalHttp,並調用download方法,該例中使用download(String,String,AjaxCallBack<File>);方法,第一個參數是將要下載的檔案路徑,第二個參數為本地檔案儲存路徑,第三個是一個回呼函數,每隔一秒會調用一次,可以方便的查看檔案下載進度以及檔案下載情況如成功失敗,下載完成等,需重寫onStart,onLoading,onSuccess,onFailure等方法。
最後不要忘了在AndroidManifest.xml中添加網路存取權限和儲存卡讀取及寫入許可權:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />