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); } }
Miei appunti liberi, senza pretesa di dire necessariamente sempre cose giuste o sensate, durante l'apprendimento e la pratica della programmazione
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:
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento