2017-04-06 90 views
0

我设法使用onlongclicklistner()在下面给出的代码的帮助下将图像从imageview保存到图库。但问题是,它总是保存最后的图像剂量问题,我试图保存图像。在viewpager中将图像从imageview保存到图库

public class CapturePhotoUtils { 


     public final String insertImage(ContentResolver cr, 
               Bitmap source, 
               String title, 
               String description) { 

      ContentValues values = new ContentValues(); 
      values.put(MediaStore.Images.Media.TITLE, title); 
      values.put(MediaStore.Images.Media.DISPLAY_NAME, title); 
      values.put(MediaStore.Images.Media.DESCRIPTION, description); 
      values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 
      // Add the date meta data to ensure the image is added at the front of the gallery 
      values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis()); 
      values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); 

      Uri url = null; 
      String stringUrl = null; /* value to be returned */ 

      try { 
       url = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

       if (source != null) { 
        OutputStream imageOut = cr.openOutputStream(url); 
        try { 
         source.compress(Bitmap.CompressFormat.JPEG, 50, imageOut); 
        } finally { 
         imageOut.close(); 
        } 

        long id = ContentUris.parseId(url); 
        // Wait until MINI_KIND thumbnail is generated. 
        Bitmap miniThumb = MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MINI_KIND, null); 
        // This is for backward compatibility. 
        storeThumbnail(cr, miniThumb, id, 50F, 50F, MediaStore.Images.Thumbnails.MICRO_KIND); 
       } else { 
        cr.delete(url, null, null); 
        url = null; 
       } 
      } catch (Exception e) { 
       if (url != null) { 
        cr.delete(url, null, null); 
        url = null; 
       } 
      } 

      if (url != null) { 
       stringUrl = url.toString(); 
      } 

      return stringUrl; 
     } 


     private final Bitmap storeThumbnail(
       ContentResolver cr, 
       Bitmap source, 
       long id, 
       float width, 
       float height, 
       int kind) { 

      // create the matrix to scale it 
      Matrix matrix = new Matrix(); 

      float scaleX = width/source.getWidth(); 
      float scaleY = height/source.getHeight(); 

      matrix.setScale(scaleX, scaleY); 

      Bitmap thumb = Bitmap.createBitmap(source, 0, 0, 
        source.getWidth(), 
        source.getHeight(), matrix, 
        true 
      ); 

      ContentValues values = new ContentValues(4); 
      values.put(MediaStore.Images.Thumbnails.KIND,kind); 
      values.put(MediaStore.Images.Thumbnails.IMAGE_ID,(int)id); 
      values.put(MediaStore.Images.Thumbnails.HEIGHT,thumb.getHeight()); 
      values.put(MediaStore.Images.Thumbnails.WIDTH,thumb.getWidth()); 

      Uri url = cr.insert(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, values); 

      try { 
       OutputStream thumbOut = cr.openOutputStream(url); 
       thumb.compress(Bitmap.CompressFormat.JPEG, 100, thumbOut); 
       thumbOut.close(); 
       return thumb; 
      } catch (FileNotFoundException ex) { 
       return null; 
      } catch (IOException ex) { 
       return null; 
      } 
     } 
    } 

我从viewpager从可绘制的阵列获取图像将图像

类CustomPagerAdapter扩展PagerAdapter {

Context mContext; 
    LayoutInflater mLayoutInflater; 

    public CustomPagerAdapter(Context context) { 
     mContext = context; 
     mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return mResources.length; 
    } 


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

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     View itemView = mLayoutInflater.inflate(R.layout.image_slider_item, container, false); 

     imageView = (TouchImageView) itemView.findViewById(R.id.imageView); 
     imageView.setImageResource(mResources[position]); 

     imageView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View view) { 

       CapturePhotoUtils photoUtils = new CapturePhotoUtils(); 
       imageView.setDrawingCacheEnabled(true); 
       Bitmap b = imageView.getDrawingCache(); 
       photoUtils.insertImage(Full_Screen_Slider.this.getContentResolver(), 
        b, "1image", "this is downloaded image sample"); 
       Toast.makeText(mContext, "longpress ", Toast.LENGTH_SHORT).show(); 

       return true; 
      } 
     }); 

     container.addView(itemView); 

     return itemView; 
    } 

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

} 
+0

检查** onLongClickListener()**总是返回相同的数据还是不同的?代码看起来很好。 –

+0

发表你的onLongClickListener()代码 –

+0

你如何在imgeView上放置多个图像你可以显示吗?可能会使imageView final可以解决这个问题。它会为每个imageView制作单独的对象。 – 9spl

回答

0

替换此

@Override 
    public Object instantiateItem(ViewGroup container,final int position) { 
     final View itemView = mLayoutInflater.inflate(R.layout.image_slider_item, container, false); 

     final TouchImageView imageView = (TouchImageView) itemView.findViewById(R.id.imageView); 
     imageView.setImageResource(mResources[position]); 

     imageView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View view) { 

       CapturePhotoUtils photoUtils = new CapturePhotoUtils(); 
       imageView.setDrawingCacheEnabled(true); 
       Bitmap b = imageView.getDrawingCache(); 
       photoUtils.insertImage(Full_Screen_Slider.this.getContentResolver(), 
        b, "1image", "this is downloaded image sample"); 
       Toast.makeText(mContext, "longpress ", Toast.LENGTH_SHORT).show(); 

       return true; 
      } 
     }); 

     container.addView(itemView); 

     return itemView; 
    } 

它替换你的看法每次它调用instantiateItem,所以最终它会有所帮助。

+0

谢谢老兄只是一个快速的问题,你能告诉我在哪里把进度对话框在此代码显示图像下载和隐藏在图像存储 – bilal

+0

您可以查看资源就绪,您可以在其中隐藏进度条https://github.com/bumptech/glide/wiki/Custom-targets – bilal

+0

尝试用户滑翔加载图像inimageview这将给它的工作:-) – 9spl

相关问题