編輯:關於Android編程
該項目實現的功能如下:
獲取手機相冊,點擊每個相冊之後進入該相冊的圖片列表界面,在圖片列表界面可以實現圖片多選,然後進入所選擇的圖片界面,在該界面內可以實現所選圖片的上傳等功能。
該項目最大特色:
1、獲取相冊列表,目前網絡上面介紹獲取相冊的項目很少,本文專門講述相冊的獲取。
2、使用Android-Universal-Image-Loader集成框架-第三方jar包加載本地圖片,熟悉這個jar的開發者肯定不陌生,該jar包十分強大,除了可以獲取網絡圖片,本地圖片也是可以的。同時,通過引用第三方jar可以有效解決OOM異常問題。
繼續講述相冊內圖片列表界面的實現,首先給出相冊列表界面Acitivity類代碼:
public class AlbumItemActivity extends Activity {
private GridView gridView;
private PhotoUpImageBucket photoUpImageBucket;
//相冊對象,相冊內部保存了該相冊內部的圖片列表
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.album_item);
init();//初始化
setListener();//設置監聽器
}
private void init(){
gridView = (GridView) findViewById(R.id.album_item_gridv);
Intent intent = getIntent();
photoUpImageBucket = (PhotoUpImageBucket) intent.getSerializableExtra(imagelist);
AlbumItemAdapter adapter = new AlbumItemAdapter(photoUpImageBucket.getImageList(), AlbumItemActivity.this);
gridView.setAdapter(adapter);
}
private void setListener(){
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,
int position, long id) {
Toast.makeText(AlbumItemActivity.this, 選中了+position, Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
下面給出適配器代碼:
public class AlbumItemAdapter extends BaseAdapter {
private List list;
private LayoutInflater layoutInflater;
private ImageLoader imageLoader;//圖片加載器
private DisplayImageOptions options;
public AlbumItemAdapter(List list,Context context){
this.list = list;
layoutInflater = LayoutInflater.from(context);
imageLoader = ImageLoader.getInstance();
// 使用DisplayImageOption.Builder()創建DisplayImageOptions
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.default_loading_pic)
// 設置圖片下載期間顯示的圖片
.showImageForEmptyUri(R.drawable.default_loading_pic) // 設置圖片Uri為空或是錯誤的時候顯示的圖片
.showImageOnFail(R.drawable.default_loading_pic)
// 設置圖片加載或解碼過程中發生錯誤顯示的圖片
.cacheInMemory(true)
// 設置下載的圖片是否緩存在內存中
.cacheOnDisc(true)
// 設置下載的圖片是否緩存在SD卡中
// .displayer(new RoundedBitmapDisplayer(20)) // 設置成圓角圖片
.bitmapConfig(Config.ARGB_8888)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.build();
// 創建配置過的DisplayImageOption對象
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.album_item_image_view, parent, false);
holder = new Holder();
holder.imageView = (ImageView) convertView.findViewById(R.id.image_item);
convertView.setTag(holder);
}else {
holder = (Holder) convertView.getTag();
}
//圖片加載器的使用代碼,就這一句代碼即可實現圖片的加載。請注意
//這裡的uri地址,因為我們現在實現的是獲取本地圖片,所以使
//用file://+圖片的存儲地址。如果要獲取網絡圖片,
//這裡的uri就是圖片的網絡地址。
imageLoader.displayImage(file://+list.get(position).getImagePath(), holder.imageView, options);
return convertView;
}
class Holder{
ImageView imageView;
}
}
圖片列表界面的適配器比較簡單,獲取數據之後進行加載即可。這裡面用到了相冊對象類PhotoUpImageBucket,該類代碼如下:
/**
* 一個目錄下的相冊對象
*/
public class PhotoUpImageBucket implements Serializable{
public int count = 0;
public String bucketName;
public List imageList;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public List getImageList() {
return imageList;
}
public void setImageList(List imageList) {
this.imageList = imageList;
}
}
同時代碼中也是用到了圖片對象類PhotoUpImageItem,該類代碼如下:
public class PhotoUpImageItem implements Serializable {
//圖片ID
private String imageId;
//原圖路徑
private String imagePath;
//是否被選擇
private boolean isSelected = false;
public String getImageId() {
return imageId;
}
public void setImageId(String imageId) {
this.imageId = imageId;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
}
}
把每個相冊和每個圖片創建為對象方便維護和更加簡便的開發,如果後期增加什麼功能,在對象的基礎上開發會很大程度上帶來方便。
在項目開發中,可能系統自帶的一些widget不能滿足我們的需求,這時就需要自定義View。通過查看系統中的常用widget如Button,TextView,EditTex
Android 確實是不允許在子線程中進行UI 操作。但有些時候,我們必須在子線程裡去執行一些耗時任務,然後根據任務的執行結果來更新相應的UI 控件,這該如何是好呢?對於
Android-async-http開源項目可以是我們輕松的獲取網絡數據或者向服務器發送數據,使用起來非常簡單, 這個網絡請求庫是基於Apache HttpClient庫
本文實例為大家分享了Android實現一個仿支付寶支付密碼的輸入框,主要實現如下:PasswordView.javapackage com.jackie.alipay.p