2016-09-12 2 views
1

Je fais une application Android, qui partage des images via les médias sociaux. Les images sont dans une disposition de grille , donc quand un utilisateur appuie sur une image, il ouvre une autre activité qui montrera cette image spécifique (qui peut maintenant être partagée). Les images sont stockées dans le dossier drawable. Je veux que l'image que je partage soit différente (plus petit - 32px) que celle que l'utilisateur voit dans son activité séparée qui est plus grande (172px).Afficher une grande image, mais partager une image plus petite dans android

Voici l'activité dans laquelle vous affichez l'image plein:

public class FullImage extends AppCompatActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.full_image); 

     Intent i = getIntent(); 

     int position = i.getExtras().getInt("id"); 
     ImageAdapter imageAdapter = new ImageAdapter(this); 

     ImageView imageView = (ImageView) findViewById(R.id.full_image_view); 
     imageView.setImageResource(imageAdapter.mThumbIds[position]); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 

    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     OutputStream output; 

     ImageView image = (ImageView) findViewById(R.id.full_image_view); 
     Bitmap bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap(); 

     File dir = new File(Environment.getExternalStorageDirectory() + "/images"); 

     dir.mkdirs(); 

     File file = new File(dir, "images.png"); 

     try { 
      verifyStoragePermissions(this); 
      output = new FileOutputStream(file); 

      bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
      output.flush(); 
      output.close(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     switch (item.getItemId()) { 
      case R.id.action_share: 
       Uri uri = Uri.fromFile(file); 
       Intent shareIntent = new Intent(); 
       shareIntent.setAction(Intent.ACTION_SEND); 
       shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
       shareIntent.setType("image/png"); 
       startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.action_share))); 

      case android.R.id.home: 
       onBackPressed(); 
       return true; 
     } 
     return true; 

    } 

    // Storage Permissions 
    private static final int REQUEST_EXTERNAL_STORAGE = 1; 
    private static String[] PERMISSIONS_STORAGE = { 
      Manifest.permission.READ_EXTERNAL_STORAGE, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE 
    }; 

    public static void verifyStoragePermissions(Activity activity) { 
     // Check if we have write permission 
     int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

     if (permission != PackageManager.PERMISSION_GRANTED) { 
      // We don't have permission so prompt the user 
      ActivityCompat.requestPermissions(
        activity, 
        PERMISSIONS_STORAGE, 
        REQUEST_EXTERNAL_STORAGE 
      ); 
     } 
    } 
} 
+2

Utilisez Bitmap.createScaledBitmap pour créer un à partir de l'original bitmap de taille différente: https://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap(android.graphics.Bitmap, int , int, boolean) –

+0

Vous pouvez extraire une vignette de l'image principale, qui sera plus petite et de plus faible résolution –

Répondre

1

Vous pouvez redimensionner le bitmap avant le stocker, ou stocker une seconde image réduite.

int PIXELS = 32; 
... 
bitmap = bitmap.createScaledBitmap(bitmap, PIXELS , PIXELS , true)); 
bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
+0

Merci @adalPaRi .... travaillé comme un charme –