如何在视图寻呼机android中保存图像?

时间:2014-08-23 11:13:39

标签: android android-intent android-activity android-sdcard

我正在使用GridView,其中点击图像(作为Drawables)以在ViewPager中显示(用于在图像之间滑动)。我正在使用保存按钮将图像保存到SD卡,但我这样做有困难。

以下是代码:

ViewPagerImage:

public class ViewPagerImage extends Activity {
    // Declare Variable
    int position;
    Button save;
    Context mContext ;

    final File myDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Pictures/Images/");
    boolean success = false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set title for the ViewPager
        setTitle("ViewPager");
        // Get the view from view_pager.xml
        setContentView(R.layout.viewpager);
        save=(Button)findViewById(R.id.button1);

        // Retrieve data from MainActivity on item click event
        Intent p = getIntent();
        position = p.getExtras().getInt("id");

        final ImageAdapter imageAdapter = new ImageAdapter(this);
        List<ImageView> images = new ArrayList<ImageView>();

        // Retrieve all the images
        for (int i = 0; i < imageAdapter.getCount(); i++) {
            ImageView imageView = new ImageView(this);
            imageView.setImageResource(imageAdapter.mThumbIds[i]);
            imageView.setScaleType(ImageView.ScaleType.CENTER);
            images.add(imageView);
        }

        // Set the images into ViewPager
        final ImageViewPagerAdapter pageradapter = new ImageViewPagerAdapter(images);
        final ViewPager viewpager = (ViewPager) findViewById(R.id.pager);
        viewpager.setAdapter(pageradapter);
        // Show images following the position
        viewpager.setCurrentItem(position);
        save.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View arg0) {
                // TODO Auto-generated method stub

                final Random generator = new Random();
                int n = 10000;
                n = generator.nextInt(n);
                final String fname = "StyleMe-" + n + ".png";

                myDir.mkdirs();

                File image = new File(myDir, fname);
                //I don't know what to use in this.. :(
                //Drawable drawable = mContext.getResources().getDrawable();
                Bitmap bitmap =((BitmapDrawable) drawable).getBitmap();

                // Encode the file as a PNG image.
                FileOutputStream outStream;
                try {

                    outStream = new FileOutputStream(image);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
                    /* 100 to keep full quality of the image */

                    outStream.flush();
                    outStream.close();
                    success = true;
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                if (success) {
                    Toast.makeText(getApplicationContext(), "Image saved with success at /sdcard/Pictures/SexyImages",
                            Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(),
                            "Error during image saving", Toast.LENGTH_LONG).show();
                }
                sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse
                            ("file://"
                             + Environment.getExternalStorageDirectory())));

                }
        });
    }
    // ...
}

ImageViewPagerAdapter:

public class ImageViewPagerAdapter extends PagerAdapter {
    private List<ImageView> images;

    public ImageViewPagerAdapter(List<ImageView> images) {
        this.images = images;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = images.get(position);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(images.get(position));
    }

    @Override
    public int getCount() {
        return images.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object o) {
        return view == o;
    }
}

1 个答案:

答案 0 :(得分:1)

     Use this to save image :
     public Object instantiateItem(View collection, int position) {
     View view=null;
     LayoutInflater layoutinflater=  (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     view=layoutinflater.inflate(R.layout.adapter, null);
     Button save=(Button)view.findViewById(R.id.savebutton);
     save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //imageview to be used to save it.
            image.setDrawingCacheEnabled(true);
                Bitmap bitmap = image.getDrawingCache();

                String root = Environment.getExternalStorageDirectory().toString();
                File newDir = new File(root + "/Android");//directory name of your choice    
                newDir.mkdirs();
                Random gen = new Random();
                int n = 10000;
                n = gen.nextInt(n);
                String fotoname = "Photo-"+ n +".jpg";
                File file = new File (newDir, fotoname);
                if (file.exists ()) file.delete (); 
                    try {
                       FileOutputStream out = new FileOutputStream(file);
                       bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                       out.flush();
                       out.close();
                       Toast.makeText(activity, "Saved to your folder"+fotoname, Toast.LENGTH_SHORT ).show();

                    } catch (Exception e) {

                    }

             }
    }) ;