0

アセット フォルダーから (実行時に) 画像を読み込むギャラリーを作成しています。クリックイベントで画像をSDカードに保存したい。

例: アプリが起動すると、ユーザーに画像が表示され、画像をスクロールして表示できます (この部分は完了しています)。問題は、自分のギャラリー ビューで写真が動的に読み込まれることです。私はそれらをハードコーディングしていません。

SDカードに保存したい。しかし、私は画像のハードコードされたパスを持っていません。画像は何枚あっても構いません。

 private void CopyAssets() {
        AssetManager assetManager = getAssets();
        InputStream in=null;
    String[] files = null;
        try {
            files = assetManager.list("image");
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        for(String filename : files) {


                try {
                    in = assetManager.open(filename);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
        try {
                String dirName = Environment.getExternalStorageDirectory().toString(); 
                File newFile = new File(dirName); 
                newFile.mkdirs(); 

        OutputStream out = new FileOutputStream(newFile);
        System.out.println("in tryyyy");

                copyFile(in, out);
                in.close();
                in = null;
                out.flush();
                out.close();
                out = null;
            } catch(Exception e) {
                Log.e("tag", e.getMessage());
        }

上記の方法を試しましたが、すべての画像をSDカードにコピーしたくありません。しかし、ユーザーがギャラリーから動的に選択したものだけです。画像が多くなりますので。各画像パスをハードコーディングするのは大変です。

Android で現在の画像パスまたは URI を文字列で取得する方法はありますか? とはView v = this.getCurrentFocus();? それは何を返しますか?

4

2 に答える 2

0

ギャラリーはAdapterViewから拡張され、adapterView場合と同様に、アイテムが選択されているときのリスナーを追加できます。

どのアイテムが選択されたかがわかっている場合は、それを使用して、目的の画像をSDカードにコピーします。

adapterViewのアダプターを実装する方法をよりよく理解するには、「listViewの世界」のビデオをご覧ください。パスをviewHolderに入れたい場合があります(コードとデザインによって異なります)。

于 2012-08-18T08:20:39.820 に答える
0

これは、画像(ビットマップ)をメモリに保存できるようにするために作成したメソッドです。パラメータには、ビットマップ オブジェクトとそのオブジェクトのファイル名が必要です。

public void writeBitmapToMemory(String filename, Bitmap bitmap) {
        FileOutputStream fos;
        // Use the compress method on the Bitmap object to write image to the OutputStream
        try {
            fos = this.openFileOutput(filename, Context.MODE_PRIVATE);
            // Writing the bitmap to the output stream
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();

        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();


        } 
        catch (IOException e) {
            e.printStackTrace();


        }

    }

これが役立つことを願っています。

于 2012-08-18T08:25:34.310 に答える