2017-10-27 12 views
0

ビットマップが必要です。別のアプリケーションの暗黙のインテントから共有されるURIが提供されています。現在はURIのビットマップ

  Bitmap btmp = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), urinormal); 

となっていますが、ビットマップの作成には最大で30分かかります。できるだけ早く作業する必要があります。どうすればいいですか?

ビットマップの品質を落とす方法が見つからないため、後でBitmapFactory.optionsを適用して小さいビットマップを作成することしかできませんが、それは役に立ちません。

答えて

0

おそらくファイルサイズが大きすぎます。それが大きい場合、それは所要時間を要する。あなたはそれについて何もすることはできません。

約半分の時間がかかる場合は、AsyncTaskを使用してデコードを実行して、UIがフリーズしないようにすることができます。

ギャラリータイプのアプリを開発しているとお伝えしました。ビットマップのサムネイルを最初に読み込むときに、そのビットマップのサムネイルをストレージに保存することができます。次回は、サムネイルファイルから画像を素早くデコードすることができます。画像をクリックすると、元の位置からフルサイズの画像を読み込むことができます。

彼の答えに記載されているように、同様の機能を実現するためにPicassoやGlideのようなサードパーティの画像ロードライブラリを使用することもできます。

+0

私はギャラリーアプリのようなものを作成しようとしています。 ViewPagesを使用して画像を処理するので、おそらく私はそれを行うべきです。 Googleフォトがそれを即座に行い、解像度を下げずにどのように管理していますか? – Tomhawk

+0

初めて画像を読み込むと、サムネイルと呼ばれるさまざまな隠しファイルに小さい画像が保存されます。それを実装し、サムネイルだけをビューにロードしたいと思うかもしれません。サムネイルをクリックすると、完全な画像が開きます。マッピングにはデータベースを使用する必要があります。 –

0

イメージが遅くなる理由はたくさんあります。遅い接続、大きいファイルなど 私はGlide、アンドロイドの画像読み込みライブラリを使用することをお勧めします。

GlideApp 
    .with(ctx) 
    .load(url) 
    .centerCrop() 
    .placeholder(R.drawable.loading_spinner) 
    .into(myImageView); 

イメージがロードされるまで、カスタム読み込みイメージが表示されます。 グライドのGenerated APIを使ってGlideAppクラスにする必要があります。ドキュメントを読むと、他にも多くの機能があります。

希望します。

関連する問題