0

Android アプリケーションにページャー アクティビティがあり、ページャーの位置に従って画像を保存する必要があります。私はなんとか保存部分を実行しましたが、最初の画像で保存をクリックすると、2番目の画像と同じように2番目の画像が保存され、3番目の画像が保存されます。コードの何が問題なのかわかりません! `

enter code here

public boolean onOptionsItemSelected(MenuItem item) 
{
    // Handle item selection
    if (item.getItemId()==R.id.menuFinale) 
    {

        ImageView imageView = (ImageView) findViewById(R.id.image_one);
        imageView.setDrawingCacheEnabled(true);
        Bitmap bitmap = imageView.getDrawingCache();
        File root = Environment.getExternalStorageDirectory();
        MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "My pic" ,"Saved to gallery");
        File file = new File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
        try 
        {
            file.createNewFile();
            FileOutputStream ostream = new FileOutputStream(file);
            bitmap.compress(CompressFormat.JPEG, 100, ostream);
            ostream.close();
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }



        return true;
    }
        else  {
                return super.onOptionsItemSelected(item);
            }
    }
4

2 に答える 2

0

キャッシュを参照しているimageViewの代わりに問題を最終的に解決することができました。代わりにViewPagerを参照して、imageViewを含むすべてをキャッシュする必要があります。代わりに、ここに私の新しいコードがあります

enter code here

public boolean onOptionsItemSelected(MenuItem item) 
{
    // Handle item selection
    if (item.getItemId()==R.id.menuFinale) 
    {


        pager.setDrawingCacheEnabled(true);

        pager.buildDrawingCache(true);
        pager.setDrawingCacheEnabled(true);

        Bitmap b = pager.getDrawingCache(true);
        File root = Environment.getExternalStorageDirectory();
        MediaStore.Images.Media.insertImage(getContentResolver(), b, "My pic" ,"Saved to gallery");
        File file = new File(root.getAbsolutePath()+"/DCIM/HD.jpg");
        try 
        {
            file.createNewFile();
            FileOutputStream ostream = new FileOutputStream(file);
            b.compress(CompressFormat.JPEG, 100, ostream);
            ostream.close();

        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return true;
    }
        else  
            {
                return super.onOptionsItemSelected(item);
            }     

}

于 2013-07-18T23:28:47.090 に答える