CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 29 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 5 su 5
Discussione:

Disegnare con Android

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jun 2011
    Messaggi
    8

    Ringraziamenti
    0
    Ringraziato 1 volta in 1 Post
    Post

    Disegnare con Android

    Ciao a tutti ragazzi,

    mi sono addentrato da poco nella programmazione con Eclipse e relativo SDK e ho già sviluppato alcune applicazioni di prova.
    Ora mi sorge un dubbio al quale non sono riuscito a trovare ancora del codice sorgente o qualche tutorial:

    vorrei sviluppare una specie di blocco note dove si può scrivere (un po come fa il rich-note) sia con del testo sia a mano disegnando. L'utente può scegliere in qualsiasi momento se passare dalla modalità testo a quella grafica aggiungendo appunto delle scritte disegnando direttamente sulla nota.

    Fino all'inserimento di testo non c'è alcunissimo problema, ma non trovo da nessuna parte del codice per poter in qualche modo permettere all'utente di disegnare sullo schermo e salvare la nota in formato editabile.

    Qualcuno può aiutarmi? .-)

    Grazie anticipatamente.

    Un salutone a tutti

  2. Il seguente Utente ha ringraziato MarcosMarble per il post:

    AndroXDev (08-07-12)

  3.  
  4. #2
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da MarcosMarble Visualizza il messaggio
    Ciao a tutti ragazzi,

    mi sono addentrato da poco nella programmazione con Eclipse e relativo SDK e ho già sviluppato alcune applicazioni di prova.
    Ora mi sorge un dubbio al quale non sono riuscito a trovare ancora del codice sorgente o qualche tutorial:

    vorrei sviluppare una specie di blocco note dove si può scrivere (un po come fa il rich-note) sia con del testo sia a mano disegnando. L'utente può scegliere in qualsiasi momento se passare dalla modalità testo a quella grafica aggiungendo appunto delle scritte disegnando direttamente sulla nota.

    Fino all'inserimento di testo non c'è alcunissimo problema, ma non trovo da nessuna parte del codice per poter in qualche modo permettere all'utente di disegnare sullo schermo e salvare la nota in formato editabile.

    Qualcuno può aiutarmi? .-)

    Grazie anticipatamente.

    Un salutone a tutti
    Ciao,
    per quanto io abbia implementato il disegno on Touch, posso suggerirti di visionare una CustomView molto carina per disegnare.

    A me personalmente ha dato un suggerimento per creare una mia ulteriore CustomView, che utilizzo nella mia applicazione per la firma dei clienti onTouch su dei rapporti di interventi (che poi salvo come .png, encodo in Base64 con destinazione sqlite (in un campo blob), per poi spedire la stringa Base64 ad un Webservice pubblicato da un webserver IIS che la decodifica in Base64 e la memorizza in SQL Server in un campo varbinary).

    Questa è la classe della CustomView:

    codice:
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.view.View;
     
    public class MyView extends View {
      
     boolean freeTouched = false;
     Path freePath;
      
     Bitmap myCanvasBitmap = null;
     Canvas myCanvas = null;
      
     Matrix identityMatrix;
     
     public MyView(Context context) {
      super(context);
     }
     
     public MyView(Context context, AttributeSet attrs) {
      super(context, attrs);
     }
     
     public MyView(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
     }
      
     @Override
     protected void onDraw(Canvas canvas) {
         
      if(freeTouched){
       Paint paint = new Paint();
       paint.setStyle(Paint.Style.STROKE);
       paint.setColor(Color.rgb(50, 50, 50));
       paint.setStrokeWidth(10);   
       myCanvas.drawPath(freePath, paint);   
       canvas.drawBitmap(myCanvasBitmap, identityMatrix, null);
       
        
      }
     }
     
     @Override
     public boolean onTouchEvent(MotionEvent event) {
       
      switch(event.getAction()){
      case MotionEvent.ACTION_UP:
       //freeTouched = false;
       freeTouched = true;
       break;
      case MotionEvent.ACTION_DOWN:
    
       freeTouched = true;
       freePath = new Path();
       freePath.moveTo(event.getX(), event.getY());
        
       //myCanvasBitmap.eraseColor(Color.BLACK);
        
       break;
      case MotionEvent.ACTION_MOVE:
       freePath.lineTo(event.getX(), event.getY());
       invalidate();
       break;
      }
       
      return true;
     }
      
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     
      int w = MeasureSpec.getSize(widthMeasureSpec);
      int h = MeasureSpec.getSize(heightMeasureSpec);
     
      //myCanvasBitmap = Bitmap.createBitmap(w , h/2 , Bitmap.Config.ARGB_8888);
      myCanvasBitmap = Bitmap.createBitmap(w , h , Bitmap.Config.ARGB_8888);
      myCanvas = new Canvas();   
      myCanvas.setBitmap(myCanvasBitmap);
      
      //***
      
      identityMatrix = new Matrix();
       
      setMeasuredDimension(w, h);
     }
     
     public Bitmap getCanvasBitmap(){   
      return myCanvasBitmap;
       
     }
     
    }
    e questa è la Activity che utilizza la CustomView:

    codice:
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Calendar;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.CompressFormat;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Matrix;
    import android.os.Bundle;
    import android.os.Environment;
    import android.view.Display;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View.MeasureSpec;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    public class Firma extends Activity {
     
    MyView myView;
    CharSequence menuSelezionato;
    int idMenu;
    Calendar c;
    String nomeFile, nomeFileUltimaImmagine;
    Bundle bundle;
    int w,h;
     
       @Override
       public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);         
           myView = new MyView(this);               
           myView.setBackgroundColor(Color.WHITE);
           setTitle("Al termine, premere il tasto 'back' (freccia indietro) sul tel");
           
           setContentView(myView);  
           Toast.makeText(Firma.this, "SCHERMO RUOTATO! Firmare in orizzontale lungo secondo la barra superiore!", Toast.LENGTH_LONG).show();
       }
    
     @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
         menu.add("Salva Firma");
         menu.add("Niente");
         return true;
        }
       
     @Override
        public boolean onOptionsItemSelected(MenuItem item)
        {  
     menuSelezionato = item.getTitle();
     if (menuSelezionato.equals("Configurazione e Log")) {
     idMenu = 0; 
     } else {
     idMenu = 1;
     }
     switch (idMenu){
     case 0:
         Bitmap bmp = myView.getCanvasBitmap();
         
         finish();
    break;
     case 1:
    
         break;
     }
    return super.onOptionsItemSelected(item); 
        }
     
    public void onBackPressed(){
    Bitmap bmp = myView.getCanvasBitmap();
    c = Calendar.getInstance();
     //Save in file
     String extStorageDirectory = Environment.getExternalStorageDirectory().toString() + "/" + "FirmeChiamate";
     OutputStream outStream = null;
     nomeFile = "firma_" + c.getTimeInMillis() + "_.png";
     File file = new File(extStorageDirectory, nomeFile);
     
     try {
      outStream = new FileOutputStream(file);
      //bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);  
      bmp.compress(Bitmap.CompressFormat.PNG, 100, outStream);
      outStream.flush();
          outStream.close();
          
         //Toast.makeText(Firma.this, "Firma Salvata: " + extStorageDirectory + "/" + nomeFile, Toast.LENGTH_LONG).show();
     } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      Toast.makeText(Firma.this, e.toString(), Toast.LENGTH_LONG).show();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      Toast.makeText(Firma.this, e.toString(), Toast.LENGTH_LONG).show();
     }
     
        Intent mIntent = new Intent();        
        mIntent.putExtra("firma", extStorageDirectory + "/" + nomeFile);
        mIntent.putExtra("hoGiaFirmato", "S");
        setResult(RESULT_OK, mIntent);
    finish();
    }
    
    public Bitmap ruotaBitmap(Bitmap pBitmapDaRuotare){
    
        Matrix mat = new Matrix();
        mat.postRotate(90);
        Bitmap bitmapRuotato = Bitmap.createBitmap(pBitmapDaRuotare, 0, 0, pBitmapDaRuotare.getWidth(), pBitmapDaRuotare.getHeight(), mat, true);
        return bitmapRuotato;
    }
    
    }
    Per completezza, in una precedente Activity poi questo è il metodo di store Base64 in sqlite:

    codice:
        public void insertFirmaEvento(String pIdEvento, String pIdChiamata, String pFirma){
      //***test byte array
      try {
      //String imageFirma = "/mnt/sdcard/FirmeChiamate/firma_1341605171766_.png";  
      Bitmap bitmap = BitmapFactory.decodeFile(pFirma);      
      ByteArrayOutputStream stream = new ByteArrayOutputStream();
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
      String stringaBase64Blob = Base64.encodeToString(stream.toByteArray(), Base64.DEFAULT);             
    miodb.openToWrite();
    miodb.insertFirma(pIdEvento, pIdChiamata, stringaBase64Blob);
    miodb.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      //*** fine test byte array
        }
    A parte i metodi per ruotare il Bmp (lo schermo va in landscape durante la firma, per poi tornare portrait) e quelli per la storicizzazione in /sdcard (appoggio) e in db sqlite (blob Base64),
    spero che queste indicazioni possano aiutarti per iniziare.
    Ciao!
    Ultima modifica di frank17next; 08-07-12 alle 21:02
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  5. Il seguente Utente ha ringraziato frank17next per il post:

    AndroXDev (08-07-12)

  6. #3
    Baby Droid


    Registrato dal
    Jun 2011
    Messaggi
    8

    Ringraziamenti
    0
    Ringraziato 1 volta in 1 Post
    Predefinito

    Grazie mille, mi cimenterò in questa impresa..

    alla fine vorrei semplicemente realizare una sorta di blocco note in cui si può mettere qualsiasi cosa, dal semplice carattere utilizzando i font di sistema, passando per le checklist e appunto disegni a mano libera... spero di riuscire a realizzare qualcosa di carino e pratico.

    Ancora Grazie e Un salutone.

  7. #4
    Senior Droid


    Registrato dal
    May 2010
    Località
    Rivoli
    Messaggi
    426

    Ringraziamenti
    6
    Ringraziato 48 volte in 47 Posts
    Predefinito

    Quote Originariamente inviato da frank17next Visualizza il messaggio
    ...che poi salvo come .png, encodo in Base64 con destinazione sqlite (in un campo blob), per poi spedire la stringa Base64 ad un Webservice pubblicato da un webserver IIS che la decodifica in Base64 e la memorizza in SQL Server in un campo varbinary
    Che Black Bordel!

  8. #5
    Senior Droid L'avatar di frank17next


    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    739
    Smartphone
    GNexus, Galaxy Note, GT 10.1

    Ringraziamenti
    16
    Ringraziato 143 volte in 102 Posts
    Predefinito

    Quote Originariamente inviato da TheCopacabanaMan Visualizza il messaggio
    Che Black Bordel!
    Ahah, non me ne parlare... Non ho trovato di meglio (al netto del mero scambio file) psr far parlare android con il 'mondo microsoft: windows+iis+sql server...
    C'ho perso in salute ma almeno funge come 1 orologio

    Inviato dal mio GT-N7000 con Tapatalk 2
    Nexus 6 - 5.0.1 Stock
    Nexus 5 - 5.0.1 Stock + Root
    Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy