2016-04-19 7 views
0

Wir versuchen, eine App zu erstellen, die es dem Benutzer ermöglicht, ein Bild hochzuladen, Text darüber zu schreiben und dann das neue Bild mit dem Text zu speichern.Wie kann ich ein Bild mit Text in der Galerie in Android Studio überlagern?

Unsere aktuelle Implementierung besteht darin, ein ImageView zu verwenden, um das Bild zu halten, und dann TextViews zu verwenden, um darüber zu schreiben.

Was wäre der beste Weg, um das Bild als Ganzes zu speichern? Unten ist unser aktueller Code.

Danke für die Hilfe! :)

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_generator); 

    final EditText topTextInput = (EditText)findViewById(R.id.editTopText); 
    final EditText bottomTextInput = (EditText)findViewById(R.id.editBottomText); 
    final TextView topTextView = (TextView)findViewById(R.id.topText); 
    final TextView bottomTextView = (TextView)findViewById(R.id.bottomText); 

    imageView = (ImageView)findViewById(R.id.imageView2); 
    Button pickImage = (Button) findViewById(R.id.button2); 

    pickImage.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent, SELECT_PHOTO); 
     } 
    }); 

    topTextInput.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      topTextView.setText(topTextInput.getText() + ""); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 

    bottomTextInput.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      bottomTextView.setText(bottomTextInput.getText() + ""); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
     case SELECT_PHOTO: 
      if(resultCode == RESULT_OK){ 
       try { 
        final Uri imageUri = imageReturnedIntent.getData(); 
        final InputStream imageStream = getContentResolver().openInputStream(imageUri); 
        final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream); 
        imageView.setImageBitmap(selectedImage); 
        imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 

      } 
    } 
} 
+0

Diese Frage wurde bereits gestellt und beantwortet [hier] (https: // Stackoverflow .com/questions/2174875/Bild-auf-Leinwand-zu-JPEG-Datei). –

+0

Ja, vor 6 Jahren ... komplett veraltet. –

Antwort

0

Verwendung dieses:

public Bitmap takeScreenshot() { 
     View rootView = getView(); 
     rootView.setDrawingCacheEnabled(true); 
     rootView.buildDrawingCache(true); 
     Bitmap b1 = Bitmap.createBitmap(rootView.getDrawingCache(true)); 
     rootView.setDrawingCacheEnabled(false); // clear drawing cache 
     return b1; 
    } 

und die Bitmap-Bild zu speichern:

public void saveBitmap(Bitmap bitmap) { 
    if(bitmap==null){ 
     return; 
    } 
    File imagePath1 = new File(savePath,"screenshot.jpg"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath1); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (IOException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } 
} 
Verwandte Themen