編輯:關於Android編程
這篇打算直接告訴大家怎麼用吧,其實這個也不是很難的框架,大致使用過程如下:
// 獲取緩存圖片目錄 File cacheDir = StorageUtils.getOwnCacheDirectory(activity, "imageloader/Cache"); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( activity).memoryCacheExtraOptions(800, 760) // 保存每個緩存圖片的最大長和寬 .threadPoolSize(3) .diskCache(new UnlimitedDiscCache(cacheDir)) // 線程池的大小 這個其實默認就是3 .memoryCacheSize(2 * 1024) // 設置緩存的最大字節 .denyCacheImageMultipleSizesInMemory() // 緩存顯示不同大小的同一張圖片 .imageDownloader( new BaseImageDownloader(activity, 5 * 1000, 30 * 1000)) // connectTimeout // s)超時時間 .build(); imageLoader.init(config);
第二步設置顯示圖片選項:
DisplayImageOptionsoptions = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher)//設置圖片在下載期間顯示的圖片 .showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri為空或是錯誤的時候顯示的圖片 .showImageOnFail(R.drawable.ic_launcher)//設置圖片加載/解碼過程中錯誤時候顯示的圖片 .cacheInMemory(true)//設置下載的圖片是否緩存在內存中 .cacheOnDisk(true)//設置下載的圖片是否緩存在SD卡中 .displayer(new FadeInBitmapDisplayer(100)) .considerExifParams(true) .displayer(new FadeInBitmapDisplayer(100))// 圖片加載好後漸入的動畫時間 .displayer(new RoundedBitmapDisplayer(1)).build();//這個一定要設置,不設置的話會導致圖片不能夠鋪滿整個控件,這個是設置圓角效果的,如果大家不喜歡圓角可以設置為1幾乎沒有什麼效果
下面是官方給的一個列子,會android看看下面的這個代碼應該就知道怎麼使用了吧,非常簡單
public class ImageListActivity extends AbsListViewBaseActivity { DisplayImageOptions options; String[] imageUrls; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_image_list); Bundle bundle = getIntent().getExtras(); imageUrls = bundle.getStringArray(Extra.IMAGES); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_stub) .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .displayer(new RoundedBitmapDisplayer(20)) .build(); listView = (ListView) findViewById(android.R.id.list); ((ListView) listView).setAdapter(new ItemAdapter()); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView> parent, View view, int position, long id) { startImagePagerActivity(position); } }); }
//注意下這裡,當按下返回鍵的時候清除一下在內存中的圖片,大家不過要過度依賴自動內存管理,有些時候還是手動去清除掉內存比較好, @Override public void onBackPressed() { AnimateFirstDisplayListener.displayedImages.clear(); super.onBackPressed(); } private void startImagePagerActivity(int position) { Intent intent = new Intent(this, ImagePagerActivity.class); intent.putExtra(Extra.IMAGES, imageUrls); intent.putExtra(Extra.IMAGE_POSITION, position); startActivity(intent); } private static class ViewHolder { TextView text; ImageView image; } class ItemAdapter extends BaseAdapter { private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); @Override public int getCount() { return imageUrls.length; } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = convertView; final ViewHolder holder; if (convertView == null) { view = getLayoutInflater().inflate(R.layout.item_list_image, parent, false); holder = new ViewHolder(); holder.text = (TextView) view.findViewById(R.id.text); holder.image = (ImageView) view.findViewById(R.id.image); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.text.setText("Item " + (position + 1)); imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener); return view; } } private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { static final ListdisplayedImages = Collections.synchronizedList(new LinkedList ()); @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (loadedImage != null) { ImageView imageView = (ImageView) view; boolean firstDisplay = !displayedImages.contains(imageUri); if (firstDisplay) { FadeInBitmapDisplayer.animate(imageView, 500); displayedImages.add(imageUri); } } } } }
這是一個demo,這個圖片選項最好配置成一個單列類,便於管理和減少內存的溢出。
前面的博客中,我給大家分析過數組和鏈表兩種線性表數據結構。數組存儲區間連續,查找方便,但是插入和刪除效率低下;鏈表存儲區間離散,插入刪除方便,但是查找困難。大家肯定會問,
在android中的Touch分發中,經常可以看到從ACTION_DOWN->ACTION_MOVE->ACTION_UP,當我們不了解它是如何分發的話總感覺
關於Android開發可以使用的工具有eclipse和Android studio等,這兩個工具都各有各的好處和不足。studio是谷歌推出的一款開發工具,而我們都知道A
之前重要負責收集聯系人添加歸屬地,公司這兩個智能分組;網上的實現方法很多,有說通過webserver來查詢,但是網絡這種形式不是長遠之道;畢竟服務器不是你自己的,還有