2015-09-01 3 views
0

Я хочу знать, могу ли я сохранить изображение, нарисованное в drawView, в указанную папку. Например, я хочу сохранить изображение в папку myLectureImage. А также я хочу получить изображение в приложении.Как сохранить изображение из drawView в указанную папку

благодарит за вашу помощь.

package com.example.ddsk; 

import java.util.UUID; 
import com.example.ddsk.myLectureView; 
import com.example.ddsk.R; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

public class Drawing extends Activity implements OnClickListener{ 

private Button btnback; 
private myLectureView drawView; 
private ImageButton currPaint, drawBtn, eraseBtn, newBtn, saveBtn; 
private float smallBrush, mediumBrush, largeBrush; 

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


    drawView = (myLectureView)findViewById(R.id.drawing); 
    LinearLayout paintLayout = (LinearLayout)findViewById(R.id.paint_colors); 
    currPaint = (ImageButton)paintLayout.getChildAt(0); 
    currPaint.setImageDrawable(getResources().getDrawable(R.drawable.paint_pressed)); 

    smallBrush = getResources().getInteger(R.integer.small_size); 
    mediumBrush = getResources().getInteger(R.integer.medium_size); 
    largeBrush = getResources().getInteger(R.integer.large_size); 

    drawBtn = (ImageButton)findViewById(R.id.draw_btn); 
    drawBtn.setOnClickListener(this); 
    drawView.setBrushSize(mediumBrush); 

    eraseBtn = (ImageButton)findViewById(R.id.erase_btn); 
    eraseBtn.setOnClickListener(this); 

    newBtn = (ImageButton)findViewById(R.id.new_btn); 
    newBtn.setOnClickListener(this); 

    saveBtn = (ImageButton)findViewById(R.id.save_btn); 
    saveBtn.setOnClickListener(this); 

} 

public void paintClicked(View view){ 
    //use chosen color 

    drawView.setErase(false); 
    drawView.setBrushSize(drawView.getLastBrushSize()); 

    if(view!=currPaint){ 
     //update color 
      ImageButton imgView = (ImageButton)view; 
      String color = view.getTag().toString(); 

      drawView.setColor(color); 

      imgView.setImageDrawable(getResources().getDrawable(R.drawable.paint_pressed)); 
      currPaint.setImageDrawable(getResources().getDrawable(R.drawable.paint)); 
      currPaint=(ImageButton)view; 
     } 

    } 

@Override 
public void onClick(View view){ 
//respond to clicks 
    if(view.getId()==R.id.draw_btn){ 
     //draw button clicked 
     final Dialog brushDialog = new Dialog(this); 
     brushDialog.setTitle("Brush size:"); 

     brushDialog.setContentView(R.layout.brush_chooser); 

     ImageButton smallBtn = (ImageButton)brushDialog.findViewById(R.id.small_brush); 
     smallBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       drawView.setBrushSize(smallBrush); 
       drawView.setLastBrushSize(smallBrush); 
       drawView.setErase(false); 
       brushDialog.dismiss(); 
      } 
     }); 

     ImageButton mediumBtn = (ImageButton)brushDialog.findViewById(R.id.medium_brush); 
     mediumBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       drawView.setBrushSize(mediumBrush); 
       drawView.setLastBrushSize(mediumBrush); 
       drawView.setErase(false); 
       brushDialog.dismiss(); 
      } 
     }); 

     ImageButton largeBtn = (ImageButton)brushDialog.findViewById(R.id.large_brush); 
     largeBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       drawView.setBrushSize(largeBrush); 
       drawView.setLastBrushSize(largeBrush); 
       drawView.setErase(false); 
       brushDialog.dismiss(); 
      } 
     }); 

     brushDialog.show(); 
    } 

    else if(view.getId()==R.id.erase_btn){ 
     //switch to erase - choose size 
     final Dialog brushDialog = new Dialog(this); 
     brushDialog.setTitle("Eraser size:"); 
     brushDialog.setContentView(R.layout.brush_chooser); 

     ImageButton smallBtn = (ImageButton)brushDialog.findViewById(R.id.small_brush); 
     smallBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       drawView.setErase(true); 
       drawView.setBrushSize(smallBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     ImageButton mediumBtn = (ImageButton)brushDialog.findViewById(R.id.medium_brush); 
     mediumBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       drawView.setErase(true); 
       drawView.setBrushSize(mediumBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     ImageButton largeBtn = (ImageButton)brushDialog.findViewById(R.id.large_brush); 
     largeBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       drawView.setErase(true); 
       drawView.setBrushSize(largeBrush); 
       brushDialog.dismiss(); 
      } 
     }); 

     brushDialog.show(); 
    } 

    else if(view.getId()==R.id.new_btn){ 
     //new button 
     AlertDialog.Builder newDialog = new AlertDialog.Builder(this); 
     newDialog.setTitle("New drawing"); 
     newDialog.setMessage("Start new (you will lose the current one)?"); 
     newDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       drawView.startNew(); 
       dialog.dismiss(); 
      } 
     }); 
     newDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       dialog.cancel(); 
      } 
     }); 
     newDialog.show(); 
    } 

    else if(view.getId()==R.id.save_btn){ 
     //save drawing 
     AlertDialog.Builder saveDialog = new AlertDialog.Builder(this); 
     saveDialog.setTitle("Save drawing"); 
     saveDialog.setMessage("Save drawing to device Gallery?"); 
     saveDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       //save drawing 
       String imgSaved = MediaStore.Images.Media.insertImage(
         getContentResolver(), drawView.getDrawingCache(), 
         UUID.randomUUID().toString()+".png", "drawing"); 

       if(imgSaved!=null){ 
        Toast savedToast = Toast.makeText(getApplicationContext(), 
         "Drawing saved to Gallery!", Toast.LENGTH_SHORT); 
        savedToast.show(); 
       } 
       else{ 
        Toast unsavedToast = Toast.makeText(getApplicationContext(), 
         "Oops! Image could not be saved.", Toast.LENGTH_SHORT); 
        unsavedToast.show(); 
       } 
      } 
     }); 
     saveDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
      public void onClick(DialogInterface dialog, int which){ 
       dialog.cancel(); 
      } 
     }); 
     saveDialog.show(); 

     drawView.setDrawingCacheEnabled(true); 

     drawView.destroyDrawingCache(); 
    } 

} 

} 

ответ

0
package com.example.sfo; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.util.UUID; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.CompressFormat; 
import android.graphics.Color; 
import android.media.MediaScannerConnection; 
import android.media.MediaScannerConnection.OnScanCompletedListener; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
import com.example.sof.R; 

public class MainActivity extends Activity { 
    private static final String TAG = "MainActivity"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // get our application's root view. 
     final View view = getWindow().getDecorView().findViewById(android.R.id.content); 
     view.setDrawingCacheEnabled(true); 
     view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 

     // read documentation. 
     view.setDrawingCacheBackgroundColor(Color.WHITE); 

     Button btn = (Button) findViewById(R.id.button1); 
     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // save the whole app view 
       saveView(view); 
      } 
     }); 
    } 

    private void saveView(final View view) { 
     String storagePath = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     String targetDirPath = storagePath + "/myLectureImage/"; 

     File targetDir = new File(targetDirPath); 
     if (!targetDir.exists()) { 
      if (false == targetDir.mkdirs()) { 
       Log.d(TAG, "Could not create dir: " + targetDirPath); 
       return; 
      } 
     } 

     String filePath = targetDirPath + UUID.randomUUID().toString() + ".png"; 
     File file = new File(filePath); 
     Log.d(TAG, "File path: " + filePath); 

     try { 
      file.createNewFile(); 

      FileOutputStream ostream = null; 
      ostream = new FileOutputStream(file); 

      Bitmap bitmap = view.getDrawingCache(); 

      // NOTE: in production code, you should not be doing this from 
      // UI thread - as compress method will take some time for high 
      // quality images 
      bitmap.compress(CompressFormat.PNG, 100, ostream); 
      ostream.flush(); 
      ostream.close(); 

      // Update the new image information in media store so that it is visible in gallery app 
      MediaScannerConnection.scanFile(getApplicationContext(), new String[] { filePath }, null, 
        new OnScanCompletedListener() { 
         @Override 
         public void onScanCompleted(String path, Uri uri) { 
          // careful! you can not touch views or show toast from here. This is an async task callback. 
          Log.d(TAG, "Saved: " + path); 
         } 
        }); 

     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), "Error saving file: " + e.getMessage(), Toast.LENGTH_SHORT).show();   
     } 
    } 
} 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.sfo.MainActivity" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="Button" /> 

</RelativeLayout> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.sof" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="21" /> 

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

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.sfo.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Примечание разрешения, необходимые в манифесте.

+0

Какой из методов onClick() вы имеете в виду? –

+0

Этот номер: R.id.save_btn –

+0

мы получаем ошибку при нажатии кнопки сохранения. это говорит java.lang.NullPointerException –

Смежные вопросы