简体   繁体   English

从Android分页器将图像保存到SD卡

[英]Saving an image to sd card from android pager

I have a pager activity in my android application I need to save the images according to there position in the pager. 我的Android应用程序中有一个寻呼机活动,我需要根据寻呼机中的位置保存图像。 I managed to do the saving part but when iam in the first image i click save it saves the second image same for the second image it save the third i dont know whats wrong with my code! 我设法做了保存部分,但是当我在第一张图片中单击“保存”时,它保存的第二张图片与第二张图片相同,保存了第三张图片,我不知道我的代码有什么问题! ` `

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);
            }
    }

Try some thing as below : 尝试以下操作:

 button=(Button)vi.findViewById(R.id.button_save);

        button.setOnClickListener(new OnClickListener() {

  private Bitmap bm;
  private String PREFS_NAME;
public void onClick(View arg0) {
    String root = Environment.getExternalStorageDirectory().toString();
       File myDir = new File(root + "/saved_images");
       if(!myDir.exists()){
           myDir.mkdirs();}
       bm = BitmapFactory.decodeResource( mContext.getResources(), images[itemPos]);
         holder.image.setImageBitmap(bm);
         SharedPreferences savedNumber = mContext.getSharedPreferences(PREFS_NAME, 0); 
        int lastSavedNumber = savedNumber.getInt("lastsavednumber",0); 
        lastSavedNumber++; 
        String fname = "Image-"+lastSavedNumber+".png"; 

        File file = new File (myDir, fname); 
        if (file.exists ()) {file.delete (); } 
        try { 
        FileOutputStream out = new FileOutputStream(file); 
        bm.compress(Bitmap.CompressFormat.PNG, 100, out);//Your Bitmap from the resouce 
        out.flush(); 
        out.close(); }
         catch (Exception e) { 
        e.printStackTrace(); 
        } 

        SharedPreferences saveNumber = mContext.getApplicationContext().getSharedPreferences(PREFS_NAME, 0); 
        SharedPreferences.Editor editorset = saveNumber.edit(); 
        editorset.putInt("lastsavednumber",lastSavedNumber); 
        editorset.commit();
          Toast.makeText(mContext, "saved", Toast.LENGTH_SHORT). show();}});

hope help you. 希望对你有帮助。

I managed finally to solve my issue instead of the imageView I'm referring to cache I must instead refer to ViewPager to cache all including the imageView instead here is my new code 我终于设法解决了我的问题,而不是要引用的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);
            }     

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM