現在、私はSDカードから画像を表示するアプリを作っています。基本的には、MediaStoreのピッカーのカメラからアルバムを作成し、写真を追加します。イメージギャラリー(ローカルイメージ)を実装する方法
私は2つの方法の実装しようとした:私は、グリッドビューを表示したいいけないカスタムPagerAdapter
で
- カスタムBaseAdapterと標準ギャラリーアプリをので、すぐに全画面表示にする必要があります。その後、私は左と右のスワイプを無効にし、クリックだけを聞きたい。
atm両方の方法がポートレートモードで動作します。私がランドスケープに切り替えると、いくつかの画像がドロップするだけです。
03-20 12:20:56.515: W/OpenGLRenderer(17398): Bitmap too large to be uploaded into a texture
その後にメモリ不足のエラーがあります。 OOMとギャラリーに関する問題がいっぱいになるとスタックオーバーフローが発生するので、convertViewはBaseAdapterのgetViewで常にnullであるため、ビューをリサイクルして機能させる必要があります。
私はビューにリサイクラーを使用しました。私はビューを2に制限し、ポートレートモードはメソッド1(ギャラリーを使用)に対して機能しました。風景はまだ私に同じ問題を与える。方法2の場合
(viewflipper)それは...しかし、ポートレートモードがここで働く
@Override public void destroyItem(ViewGroup container, int position, Object object) {
WICHがところで呼び出されることはありませんでのビューを処理します。風景がまだクラッシュします。
ビットマップを取得するための私の方法:
ファインワークスpublic static Bitmap getBitmap(Context ctx, int imageId, ImageView target) { String file = getPath(ctx, imageId); BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(file, bmOptions); WindowManager mgr = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE); int scaleFactor = 1; if (mgr != null) { // Get the dimensions of the View int targetW = mgr.getDefaultDisplay().getWidth(); int targetH = mgr.getDefaultDisplay().getHeight(); Log.d(TAG, "Image width + height=" + targetW + "," + targetH); int photoW = bmOptions.outWidth; int photoH = bmOptions.outHeight; // Determine how much to scale down the image scaleFactor = Math.min(photoW/targetW, photoH/targetH); } else { Log.d(TAG, "Target is null"); } // Get the dimensions of the bitmap // Decode the image file into a Bitmap sized to fill the View bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; bmOptions.inPurgeable = true; logHeap(ImageHelper.class); Bitmap bm = BitmapFactory.decodeFile(file, bmOptions); if (target != null) { target.setImageBitmap(bm); } return bm; }
が、私は画面サイズを取得するには、ウィンドウマネージャを使用して知っているが、私はそれを膨らませるとき、私のImageViewのは、まだサイズ(0,0)であるので、それがあります。その後私はドロウアブルまたはAPKに含まれ、他のリソースを使用していけないことに注意してください
...何も動いていないようにみえ
を呼び出します。 このギャラリーは、撮影した画質でSDカードまたはカメラから画像を読み込むことができるはずです。不潔なことに、ギャラリーはディレクトリ内にあるように多くのイメージを扱うことができるはずです。imgView.setLayoutParams(new Gallery.LayoutParams( Gallery.LayoutParams.FILL_PARENT, Gallery.LayoutParams.FILL_PARENT)); imgView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
誰かが次の質問で私を助けてくれますか?
- デフォルトギャラリーをフルスクリーン表示にしてグリッド表示をブロックする方法はありますか?この方法では、自分のビューを作成するのではなく、画像を提供するアダプタしか必要ありません。 (多分これがOOMのクラッシュを解消する)
- 私のビットマップデコード機能は大丈夫ですか?私は風景の変更をキャッチするためにいくつかのハックでビルドする必要がありますか?
- ビューアやギャラリーを使って、私が必要とする種類のギャラリーを作るにはどうすればいいですか?
- 誰かがクラッシュしないフルスクリーンギャラリーのサンプルコードを持っていますか?
ギャラリーを作成しようとしていますか、ギャラリーにアクセスしようとしていますか?また、デコードロジックもうまくいきます。 – lokoko