大佬教程收集整理的这篇文章主要介绍了Android:扫描目录并显示图片(缩略图)(图片未存储在mediastore中),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我不希望在媒体商店中扫描或提供图片,因此我希望我的应用扫描目录并创建缩略图并显示这些缩略图.
我发现它真的很薄,找到任何高质量的例子来做到这一点.
任何人都可以帮助一个小例子.
这是我想要做的.
>图片存储在SD卡的目录中.
>使用我的自定义图库,它将扫描此目录,但“不”使用媒体库
>我需要显示目录的内容,但作为缩略图我假设我需要先创建这个缩略图?
>点击一个thumnail将是我的自定义图库中的全屏图像.
我想我只需要一些帮助就可以从目录中获取图片,因为我没有存储整个媒体库,所以我无法使用查询.另一件令我担心的事情是,我需要为这些图像中的每一个创建缩略图(在运行中?)因为显示图像但是尺寸减小我会怀疑@L_673_26@会非常糟糕.
任何人都可以伸出援助之手吗?
提前致谢
现在,在getView()中我们要么从缓存中获取一个缩略图位图,如果我们已经有了它,否则我们制作一个灰色占位符并启动ThumbnailBuilder来创建缩略图.从中获取位图.
我认为你必须稍微更改ThumbnailBuilder,因为我创建了相当大的“缩略图”(500×500),因为我还需要调整大小的图像用于其他目的.此外,当我处理相机拍摄的照片时,有一些东西,根据exif信息旋转图像.但基本上,ThumbnailBuilder只是检查是否已经有缩略图(我的缩略图图像放在同一个文件夹中,但前缀是small_而不是orig_) – 如果缩略图已经存在,我们将其作为Bitmap并完成,否则图像生成.最后,在onPostExecute()中,位图设置为ImageView.
public class Photoadapter extends BaseAdapter { private Context mContext; privatE int mCellSize; private File mFolder; private File[] mFileList; private Map<Object,Bitmap> mThumbnails = new HashMap<Object,Bitmap>(); private Set<Object> mCreaTingtriggered = new HashSet<Object>(); // flag that creaTing already triggered public Photoadapter(Context context,int cellSizE) { mContext = context; mCellSize = cellSize; } @Override public int getCount() { if (mFolder == null) { return 0; // don't do this } else { return mFileList.length; } } @Override public Object getItem(int position) { return mFileList[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position,View convertView,ViewGroup parent) { ImageView view = (ImageView)convertView; if (view == null) { view = new ImageView(mContext); view.setLayoutParams(new GridView.LayoutParams(mCellSize,mCellSizE)); view.setScaleType(ImageView.ScaleType.CENTER_CROp); view.setPadding(8,8,8); view.setBACkgroundColor(0xFFC6CCD3); } Object item = getItem(position); Bitmap bm = mThumbnails.get(item); if (bm == null) { view.setImageBitmap(null); if (!mCreaTingtriggered.contains(item)) { mCreaTingtriggered.add(item); new ThumbnailBuilder(view,(FilE)item).execute(); } } else { view.setImageBitmap(bm); } return view; } public void setBaseFolder(File baseFolder) { if (baseFolder == null) return; if (!baseFolder.equals(mFolder)) { releaseThumbnails(); mFolder = baseFolder; } refresh(); } public void refresh() { if (mFolder == null) { return; } mFileList = mFolder.listFiles(EtbApplication.origImageFilenameFilter); if (mFileList == null) mFileList = new File[0]; notifyDataSetChanged(); } public void releaseThumbnails() { for (Bitmap bm : mThumbnails.values()) { bm.recycle(); } mThumbnails.clear(); } // ------------------------------------------------------------------------------------ Asynchronous Thumbnail builder private class ThumbnailBuilder extends AsyncTask<Void,Integer,Bitmap> { private ImageView mView; private File mFile; public ThumbnailBuilder(ImageView view,File filE) { mView = view; mFile = file; } @Override protected Bitmap doInBACkground(Void... params) { Log.d("adapter","make small image and thumbnail"); try { return createThumbnail(mFile.getAbsolutePath()); } catch (Exception E) { return null; } } @Override protected void onPostExecute(Bitmap result) { if (result != null) { mView.setImageBitmap(result); mThumbnails.put(mFile,result); } else { mView.setImageresource(R.drawable.ic_launcher); } } /** * Creates Thumbnail (also rotates according to exif-info) * @param file * @return * @throws IOException */ private Bitmap createThumbnail(@R_618_10495@ng filE) throws IOException { File thumbnailFile = new File(file.replace("orig_","small_")); // If a small image version already exists,just load it and be done. if (thumbnailFile.exists()) { return BitmapFactory.decodeFile(thumbnailFile.getAbsolutePath()); } // Decode image size BitmapFactory.options bounds = new BitmapFactory.options(); bounds.inJustDecodeBounds = true; BitmapFactory.decodeFile(file,bounds); if ((bounds.outWidth == -1) || (bounds.outHeight == -1)) return null; int w,h; if (bounds.outWidth > bounds.outHeight) { // Querformat w = 500; h = 500 * bounds.outHeight / bounds.outWidth; } else { // Hochformat h = 500; w = 500 * bounds.outWidth / bounds.outHeight; } BitmapFactory.options opts = new BitmapFactory.options(); opts.inSampleSize = 4; // resample -- kleiner aber noch nicht die 500 Pixel,die kommen dAnn unten Bitmap resizedBitmap = BitmapFactory.decodeFile(file,opts); resizedBitmap = Bitmap.createScaledBitmap(resizedBitmap,w,h,truE); ExifInterface exif = new ExifInterface(filE); @R_618_10495@ng orient@R_618_10495@ng = exif.getAttribute(ExifInterface.TAG_ORIENTATION); int orientation = orient@R_618_10495@ng != null ? Integer.parseInt(orient@R_618_10495@ng) : ExifInterface.oRIENTATION_NORMAL; int rotationAngle = 0; if (orientation == ExifInterface.oRIENTATION_ROTATE_90) rotationAngle = 90; if (orientation == ExifInterface.oRIENTATION_ROTATE_180) rotationAngle = 180; if (orientation == ExifInterface.oRIENTATION_ROTATE_270) rotationAngle = 270; Matrix matrix = new Matrix(); matrix.setRotate(rotationAngle,(float) resizedBitmap.getWidth() / 2,(float) resizedBitmap.getHeight() / 2); Bitmap rotatedBitmap = Bitmap.createBitmap(resizedBitmap,matrix,truE); resizedBitmap.recycle(); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); rotatedBitmap.compress(Bitmap.CompressFormat.JPEG,90,bytes); thumbnailFile.createNewFile(); FiLeoutputStream fo = new FiLeoutputStream(thumbnailFilE); fo.write(bytes.toByteArray()); fo.close(); //new File(filE).delete(); // Originalbild lö@R_696_10906@n return rotatedBitmap; } } }
以上是大佬教程为你收集整理的Android:扫描目录并显示图片(缩略图)(图片未存储在mediastore中)全部内容,希望文章能够帮你解决Android:扫描目录并显示图片(缩略图)(图片未存储在mediastore中)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。