Ich mache eine Android-Anwendung, die Bilder über soziale Medien teilt. Die Bilder befinden sich in einem Rasterlayout. Wenn also ein Benutzer ein Bild drückt, öffnet sich eine andere Aktivität, die dieses spezifische Bild anzeigt (welches nun geteilt werden kann). Die Bilder werden im Ordner für den Ordner gespeichert. Ich möchte, dass das Bild, das ich teile, anders ist (kleiner - 32px) als der, den der Benutzer in seiner separaten Aktivität betrachtet, die größer ist (172px). HierZeigen Sie ein großes Bild, aber teilen Sie ein kleineres Bild in Android
ist die Aktivität, in dem Sie das ganze Bild sieht in:
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
);
}
}
}
Verwenden Bitmap.createScaledBitmap eine unterschiedlich große Bitmap aus dem Original zu erzeugen: https://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap(android.graphics.Bitmap, int , int, boolean) –
Sie können ein Vorschaubild aus dem Hauptbild extrahieren, die kleiner und niedriger in der Auflösung –