2016-11-25 42 views
0

获取可绘制文件夹下的多个图像并以网格视图显示。如何在点击后将图像存储在内存中?

在网格视图中显示它之后,当我们点击一​​个特定的图像时,它必须存储在设备的内部存储器中。 我实现的代码如下所示

public class Example3 extends AppCompatActivity { 
    String[] web = {"image1", "image2", "image3", 
      "image4", "image5", "image6", "image7", 
      "image8", "image9", "image10", "image11"}; 

    Integer[] displayImages = {R.drawable.image1, R.drawable.image2, R.drawable.image3, 
      R.drawable.image4, R.drawable.image5, R.drawable.image6, 
      R.drawable.image7, R.drawable.image8, R.drawable.image9, R.drawable.image10, R.drawable.image11}; 
    GridView gridView; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.example3); 

     gridView = (GridView) findViewById(R.id.gridView1); 
     gridView.setAdapter(new ImageAdapter(this)); 

     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 
       Toast.makeText(Example3.this, "You Clicked at " + web[+position] + " saved Successfully", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    private class ImageAdapter extends BaseAdapter { 

     Context context; 

     public ImageAdapter(Context context) { 
      this.context = context; 
     } 

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

     @Override 
     public Object getItem(int position) { 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View view, ViewGroup viewGroup) { 
      ImageView imageView = new ImageView(this.context); 
      imageView.setImageResource(displayImages[position]); 
      imageView.setLayoutParams(new GridView.LayoutParams(180, 150)); 
      return imageView; 
     } 
    } 

} 

我的问题是 - 如何存储在内存中的特定图像?

+0

请询问具体的问题,而不是一个一般的,unprecise目标 –

+0

你到底在期待什么,有什么问题?你应该显示你的代码,以便我们可以帮助你。 – Inconnu

+0

下一步在设备内存中存储图像.. –

回答

0

调用这个方法在你的形象点击收听:

public void addImageIntoSdcard(int position) { 

    //String extStorageDirectory = Environment.getExternalStorageDirectory().toString()+"/MyImages"; 
    File direct = new File(Environment.getExternalStorageDirectory(),"DEMO"); 

    if (!direct.exists()) { 
     direct.mkdirs(); //directory is created; 

    } 

    Bitmap bm = BitmapFactory.decodeResource(getResources(), displayImages[position]); 


    File file = new File(direct, web[position] + ".jpg"); 
    if(file.exists()){ 
     Toast.makeText(Example3.this, "You Clicked at " + web [+ position] + " already exists", Toast.LENGTH_SHORT).show(); 

    } 
    else { 
     Toast.makeText(Example3.this, "You Clicked at " + web [+ position] + " saved Successfully", Toast.LENGTH_SHORT).show(); 

    } 

    FileOutputStream outStream = null; 
    try { 
     outStream = new FileOutputStream(file); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream); 
    try { 
     outStream.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     outStream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


} 

请确保您有设定权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
+0

谢谢..但是,名为MyImages的文件夹没有创建 – sree

+0

我将在你的内存中创建。 –

+0

我已更新我的code.it将在您的内存中创建。 –

0
@Override 
     public View getView(int position, View view, ViewGroup viewGroup) { 
      ImageView imageView = new ImageView(this.context); 
      imageView.setImageResource(displayImages[position]); 
      imageView.setLayoutParams(new GridView.LayoutParams(180, 150)); 
      //add an onClickListener for the image view here to identify the specific imageview 
      return imageView; 
     } 
0

假设您的图形中有一个图像,即ic_launcher。然后,从这样的形象得到一个位图对象:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 

然后保存使用对电网点击到SD卡:

File file = new File(extStorageDirectory, "ic_launcher.PNG"); 
    outStream = new FileOutputStream(file); 
    bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
    outStream.flush(); 
    outStream.close(); 

Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 

到SD卡的路径可以使用检索不要忘记添加android.permission.WRITE_EXTERNAL_STORAGE权限。

+0

罚款...但如果想要添加多个那么图像怎么样? – sree

+0

你想添加多个图像? –

+0

把所有的东西放在循环中 –

相关问题