JavascriptProva

sabato 13 febbraio 2016

Il codice funzionante prima che venga istanziata la ScrollView

Un semplice promemoria: il codice funzionante prima che venga materializzata la ScrollView:
public class MainActivity extends Activity {

 //DICHIARAZIONI
 
 RelativeLayout mainLayout;
 ImageView imageView;
 ScrollView scrollView;
 
 
 int deltaX;
 int deltaY;
 RelativeLayout.LayoutParams absParam;
 
 //dichiarazioni delle variabili posizioni delle sottoViews
 int posEtichetta=0;
 int posCategoria=1; 
 
 
 //dichiarazione del database
 Helper helper=new Helper(this);
 
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  //DEFINIZIONI E ATTRIBUTI
  mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
  imageView=(ImageView)findViewById(R.id.imageView1);
 
  
  /*
  SalvaJElemento("bonazza","iniziale",R.drawable.bonazza,"base",0,0);
  SalvaJElemento("caffè","iniziale",R.drawable.cafe,"base",200,0);
  SalvaJElemento("faccia da culo","iniziale",R.drawable.faciadecul,"base",400,0);
  */
  //helper.aggiorna();

  Cursor c=helper.query("iniziale");
  
  //per ogni record...
  do{
   LinearLayout layout=new LinearLayout(this);
   
   //abbiamo preso i records dal database e li dobbiamo mostrare.
   //Ho materializzato un nuovo layout per ospitare un record, e vi attribuisco
   //dei parametri:
   //Creo i parametri, vi attribuisco le coordinate prelevate dal database,
   //e setto con essi i parametri del layout.
   RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
   params.leftMargin=c.getInt(5);
   params.rightMargin=-250;
   params.topMargin=c.getInt(6);
   params.bottomMargin=-250;
   Log.d("CARICAMENTO X",""+c.getInt(5));
   Log.d("CARICAMENTO Y",""+c.getInt(6));
   layout.setLayoutParams(params);
   
   //ora setto altre caratteristiche del layout, ORIENTAMENTO e COLORE.
   layout.setOrientation(LinearLayout.VERTICAL);
   layout.setBackgroundColor(Color.WHITE);
   
   
   
   //Mi occupo ore del CONTENUTO del layout: 
   
   //creo la CATEGORYVIEW e vi imposto il testo prelevato dal database, 
   //campo CATEGORIA.
   TextView categoryView = new TextView(this);
   categoryView.setText(c.getString(2));
   //la setto di altezza zero
   categoryView.setHeight(0);
   //la setto come invisibile
   categoryView.setVisibility(View.INVISIBLE);
   //aggiungo al layout la TextView CATEGORIA
   layout.addView(categoryView);
  
   //creo la TIPOVIEW e vi imposto il testo prelevato dal database,
   //campo TESTO (4° campo)
   TextView tipoView =new TextView(this);
   tipoView.setText(c.getString(4));
   //la setto di altezza zero
   tipoView.setHeight(0);
   //la setto come invisibile
   tipoView.setVisibility(View.INVISIBLE);
   //aggiungo al layout la TextView TIPOVIEW
   layout.addView(tipoView);
   
   //creo la ImageView e ne setto l'immagine prelevando il dato BLOB dal database
   //decodificandolo da array di bytes in Bitmap: 
   ImageView img=new ImageView(this);
   Bitmap b=BitmapFactory.decodeByteArray(c.getBlob(3), 0, c.getBlob(3).length);
   img.setImageBitmap(b);
   //aggiungo al layout l'ImageView IMG:
   layout.addView(img);
   

   //creo la TextView e ne setto il testo
   //prelevato dal database, campo ETICHETTA:
   TextView textView =new TextView(this);
   textView.setText(c.getString(1));
   //aggiungo al layout la TextView ETICHETTA:
   layout.addView(textView);
   
   
   //Quindi AGGIUNGO AL MAINLAYOUT il mio layout:
   mainLayout.addView(layout);
   
   //e infine setto il TOUCH LISTENER del LAYOUT:
   layout.setOnTouchListener(onTouchListener);
   
  //passo al successivo record... 
  }while(c.moveToNext());
   
  

  
 }
 
 
 //CODICE DEL TOUCH LISTENER DA ATTRIBUIRE AI LAYOUT:
 View.OnTouchListener onTouchListener=new View.OnTouchListener(){
  public boolean onTouch(View v, MotionEvent event) {
   int X=(int)event.getRawX();
   int Y=(int)event.getRawY();

    switch(event.getAction()){
    case MotionEvent.ACTION_DOWN:
     
     absParam = (RelativeLayout.LayoutParams)v.getLayoutParams();
     deltaX=X-absParam.leftMargin;
     deltaY=Y-absParam.topMargin;
     break;
    case MotionEvent.ACTION_MOVE:
     absParam = (RelativeLayout.LayoutParams)v.getLayoutParams();
     absParam.leftMargin=X-deltaX;
     absParam.topMargin=Y-deltaY;
     v.setLayoutParams(absParam);
     
     break;
    case MotionEvent.ACTION_UP:
     
     TextView ch =(TextView)((ViewGroup)v).getChildAt(3);
     
     helper.aggiorna(ch.getText()+"", v.getLeft(), v.getTop());
     
     break;
    }
   

   
   return true;
  }




 };
 
 public void SalvaJElemento(String etichetta, String categoria, int idImage, String tipo, int x, int y){
  
  //metto tutti i campi da salvare nel database in un unico parametro di tipo Elemento.
  //istanzio un elemento
  Elemento jElemento=new Elemento();
  
  //Nell'ordine: stabilisco direttamente il campo "etichetta" preso direttamente
  //dal parametro:
  jElemento.etichetta=etichetta;
  
  //stabilisco il campo "categoria", sempre direttamente, prendendolo dal parametro:
  jElemento.categoria=categoria;
  
  //L'immagine si trova invece nelle RISORSE, e devo usare il parametro Id che
  //ne specifica la risorsa per prelevarla.
  //creandone una Bitmap, rendendola più piccola e quindi riducendola di peso:
  BitmapFactory.Options opzioni=new BitmapFactory.Options();
  opzioni.inJustDecodeBounds=true;
  BitmapFactory.decodeResource(getResources(), idImage, opzioni);
  int fattore=1;
  while(opzioni.outWidth/fattore>100 && opzioni.outHeight/fattore>100){
   fattore*=2;
  }
  opzioni.inSampleSize=fattore;
  opzioni.inJustDecodeBounds=false;
  Bitmap bmp=BitmapFactory.decodeResource(getResources(), idImage,opzioni);
  
  //ora creo uno stream di array di bytes e vi decomprimo la bitmap, per poi
  //convertirla in array di bit.
  ByteArrayOutputStream stream=new ByteArrayOutputStream();
  bmp.compress(CompressFormat.JPEG, 20, stream);
  byte[] byteArray=stream.toByteArray();
  
  //e la carico nell'Elemento.
  jElemento.immagine=byteArray;
  
  //Imposto direttamente la stringa "tipo" prelevandola dai parametri
  jElemento.tipo=tipo;
  
  //Imposto direttamente le coordinate prelevandole dalle risorse di tipo intero
  jElemento.x=x;
  jElemento.y=y;
  
  //Invoco infine, completato l'Elemento, il metodo save() del database
  //per salvarvelo.
  helper.save(jElemento);
 }
}

Nessun commento:

Posta un commento