Autore Topic: Problema con layout  (Letto 269 volte)

Offline Dr.Joek

  • Nuovo arrivato
  • *
  • Post: 34
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Emulatore a gogo
  • Sistema operativo:
    Windows7, Windows8.1, Ubuntu15.3, Windows10
Problema con layout
« il: 01 Agosto 2015, 18:04:27 CEST »
0
Ciao a tutti teoricamente sto cercando di creare una "tendina"  con una parte statica sotto e una dinamica. Mi spiego meglio ho preso un layout verticale e gli ho messo nella prima casella una immagine (che però è un layout) questa immagine si dovrà allungare quindi verrà cambiata l'altezza, e poi nella casella sotto c'è un' immagine fissa che ovviamente se la lunghezza dell'immagine sopra aumenterà lei scenderà sempre di più.
In caso non aveste capito vi posto il codice e  anche qualche gif.

LogCat:
Codice: [Seleziona]
08-01 15:46:28.805  12629-12629/? D/dalvikvm﹕ Late-enabling CheckJNI
08-01 15:46:28.821  12629-12629/? D/dalvikvm﹕ GC_FOR_ALLOC freed 83K, 2% free 10827K/11011K, paused 3ms, total 3ms
08-01 15:46:28.821  12629-12629/? I/dalvikvm-heap﹕ Grow heap (frag case) to 12.466MB for 1907148-byte allocation
08-01 15:46:28.869  12629-12632/com.example.gioele.mathup D/dalvikvm﹕ GC_CONCURRENT freed <1K, 2% free 12689K/12935K, paused 20ms+27ms, total 49ms
08-01 15:46:28.869  12629-12635/com.example.gioele.mathup D/dalvikvm﹕ WAIT_FOR_CONCURRENT_GC blocked 10ms
08-01 15:46:28.901  12629-12629/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ Databse create / opened.....
08-01 15:46:28.925  12629-12629/com.example.gioele.mathup D/libEGL﹕ loaded /system/lib/egl/libEGL_genymotion.so
08-01 15:46:28.925  12629-12629/com.example.gioele.mathup D/﹕ HostConnection::get() New Host Connection established 0xb79cf9f8, tid 12629
08-01 15:46:28.929  12629-12629/com.example.gioele.mathup D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_genymotion.so
08-01 15:46:28.929  12629-12629/com.example.gioele.mathup D/libEGL﹕ loaded /system/lib/egl/libGLESv2_genymotion.so
08-01 15:46:28.949  12629-12629/com.example.gioele.mathup W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
08-01 15:46:28.953  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ Enabling debug mode 0
08-01 15:46:28.965  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79d0fc0): name, size, mSize = 1, 1907136, 1907136
08-01 15:46:29.001  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79c8868): name, size, mSize = 2, 4096, 1911232
08-01 15:46:29.425  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79b3c50): name, size, mSize = 14, 97664, 2008896
08-01 15:46:30.057  12629-12629/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ AVVIATO
08-01 15:46:30.109  12629-12629/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 226K, 3% free 12841K/13191K, paused 2ms, total 2ms
08-01 15:46:30.109  12629-12629/com.example.gioele.mathup I/dalvikvm-heap﹕ Grow heap (frag case) to 14.177MB for 1639884-byte allocation
08-01 15:46:30.121  12629-12632/com.example.gioele.mathup D/dalvikvm﹕ GC_CONCURRENT freed 2K, 3% free 14440K/14855K, paused 10ms+0ms, total 11ms
08-01 15:46:30.145  12629-12629/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 4% free 15246K/15751K, paused 1ms, total 1ms
08-01 15:46:30.153  12629-12629/com.example.gioele.mathup D/dalvikvm﹕ GC_FOR_ALLOC freed 185K, 2% free 16451K/16775K, paused 1ms, total 1ms
08-01 15:46:30.157  12629-12629/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ Databse create / opened.....
08-01 15:46:30.157  12629-12629/com.example.gioele.mathup E/DATABASE OPERATIONS﹕ AVVIATO
08-01 15:46:30.177  12629-12629/com.example.gioele.mathup W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
08-01 15:46:30.217  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79c7118): name, size, mSize = 57, 1639872, 3648768
08-01 15:46:30.221  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79dcee8): name, size, mSize = 58, 251808, 3900576
08-01 15:46:30.225  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79bc690): name, size, mSize = 59, 13312, 3913888
08-01 15:46:31.261  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79a2748): name, size, mSize = 64, 251808, 4165696
08-01 15:46:32.941  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79fab80): name, size, mSize = 141, 251808, 4417504
08-01 15:46:32.945  12629-12629/com.example.gioele.mathup D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb79bae18): name, size, mSize = 142, 251808, 4669312

Codice XML:
Codice (XML): [Seleziona]
<FrameLayout 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:background="#0099cc"
   tools:context="com.example.gioele.mathup.seleziona1">


    <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"
       android:fitsSystemWindows="true"
       android:clickable="true">

        <LinearLayout
           android:orientation="vertical"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:id="@+id/layout1"
           android:visibility="visible"
           android:layout_gravity="bottom|left|right|top">

//il linear layout sotto sarà la tendina che si dovrà estendera in altezza infatti l' height è impostata a 0 e poi il codice tramite la posizione del cursore la aggiornerà
            <LinearLayout
               android:orientation="vertical"
               android:layout_width="match_parent"
               android:layout_height="0dp"
               android:background="@drawable/pergamena"
               android:id="@+id/pergamena"
               android:visibility="visible"
               android:transitionGroup="false"
               android:touchscreenBlocksFocus="false"
               android:layout_marginLeft="10dp"
               android:layout_marginRight="10dp">

            </LinearLayout>
//questa imageview sotto invece è l'immagine statica che dovrà scendere a secondo di quanto è alta la tendina (LinearLayout) sopra
            <ImageView
               android:layout_width="match_parent"
               android:layout_height="52dp"
               android:id="@+id/tendina11"
               android:background="@drawable/tendina1" />

        </LinearLayout>

//da qua in poi il codice non penso vi possa interessare perchè sono componenti non fondamentali per questa cosa
<ImageView
           android:layout_width="match_parent"
           android:layout_height="51dp"
           android:id="@+id/tendina2"
           android:layout_gravity="center_horizontal|bottom"
           android:background="@drawable/tendina2"
           android:visibility="visible"
           android:onClick="Click3"/>

        <ImageView
           android:layout_width="match_parent"
           android:layout_height="51dp"
           android:id="@+id/tendina1"
           android:layout_gravity="center_horizontal|top"
           android:onClick="Click2"
           android:visibility="visible"
           android:layout_marginTop="0dp"
           android:background="@drawable/tendina1"
           android:layout_alignParentRight="true"
           android:layout_alignParentEnd="true" />

        <ImageView
           android:layout_width="match_parent"
           android:layout_height="52dp"
           android:id="@+id/tendina3"
           android:background="@drawable/tendina3"
           android:visibility="invisible" />

        <ImageView
           android:layout_width="match_parent"
           android:layout_height="52dp"
           android:id="@+id/tendina4"
           android:background="@drawable/tendina4"
           android:visibility="invisible"/>

        <LinearLayout
           android:orientation="horizontal"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:id="@+id/lol"
           android:layout_gravity="center_horizontal|top"
           android:layout_alignParentTop="true"
           android:layout_alignParentLeft="true"
           android:layout_alignParentStart="true"
           android:visibility="visible">

            <Button
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="New Button"
               android:id="@+id/button20"
               android:layout_gravity="bottom"
               android:onClick="ok5"
               android:visibility="visible" />
        </LinearLayout>


     

    </FrameLayout>


</FrameLayout>

Codice java (fino a dove può interessare)
Codice (Java): [Seleziona]
 public class seleziona1 extends Activity {

        String uno;
        int linguaint;

        int differenzaY = 0;

        int differenzaY1 = 0;

        int differenzaY2 = 0;

        String differenzaY12 = "0";

        String differenzaY22 = "0";

        int livello = 0;

        int vai = 0;

        int premi = 0;



        int lingua;
        String lingua2;
        SQLiteDatabase sqldatabase;
        LocalDB1Helper helper;
        Cursor c;
        DataAdapter dataadapter;








        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_seleziona1);
            final ImageView italiano1 = (ImageView) findViewById(R.id.imageView);
            final ImageView italiano2 = (ImageView) findViewById(R.id.imageView7);
            final ImageView inglese1 = (ImageView) findViewById(R.id.imageView8);
            final ImageView inglese2 = (ImageView) findViewById(R.id.imageView6);
            final ImageView tendina1 = (ImageView) findViewById(R.id.tendina1);
            final ImageView tendina2 = (ImageView) findViewById(R.id.tendina2);
            final ImageView tendina3 = (ImageView) findViewById(R.id.tendina3);
            final ImageView tendina4 = (ImageView) findViewById(R.id.tendina4);
            final Button button = (Button) findViewById(R.id.button20);
            final RelativeLayout layout2 = (RelativeLayout) findViewById(R.id.layout2);
            final LinearLayout layout1 = (LinearLayout) findViewById(R.id.pergamena);
            final ImageView tendina11 = (ImageView) findViewById(R.id.tendina11);
            final LinearLayout layout11 = (LinearLayout) findViewById(R.id.layout1);
            layout11.setVisibility(View.VISIBLE);
            tendina11.setVisibility(View.VISIBLE);
            layout2.setVisibility(View.VISIBLE);
layout1.getLayoutParams().height = 670;

            italiano2.setVisibility(View.INVISIBLE);
            inglese2.setVisibility(View.INVISIBLE);
            italiano1.setVisibility(View.INVISIBLE);
            inglese1.setVisibility(View.INVISIBLE);
            tendina2.setVisibility(View.INVISIBLE);

//apro il database

            helper = new LocalDB1Helper(getApplicationContext());
            sqldatabase = helper.getReadableDatabase();



//sfrutto il database
            //leggo il database
            Cursor c=helper.getInformations(sqldatabase); // query

            startManagingCursor(c);




            if(c.moveToFirst()){
                int linguaint=c.getColumnIndex(LocalDB1.tabella1.USER_LINGUAGGIO);

                DataProvider dataprovider = new DataProvider (lingua2);
                lingua2 = c.getString(0);
                lingua = Integer.parseInt(lingua2);
            }

            final View touchView = findViewById(R.id.tendina1);
            touchView.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {

                    final int action = event.getAction();
                    switch (action & MotionEvent.ACTION_MASK) {

                        case MotionEvent.ACTION_DOWN: {
                            premi = 1;
                            tendina3.setVisibility(View.VISIBLE);


                            differenzaY12 = String.valueOf((int) event.getY());


                            differenzaY1 = Integer.valueOf(differenzaY12);



                            break;
                        }
                        case MotionEvent.ACTION_UP: {
                            premi = 0;
                            tendina3.setVisibility(View.INVISIBLE);




                        }

                        case MotionEvent.ACTION_MOVE: {


                            differenzaY22 = String.valueOf((int) event.getY());


                            differenzaY2 = Integer.parseInt(differenzaY22);
                            if (vai == 0) {
                                layout1.getLayoutParams().height = differenzaY2;
                                button.setText(differenzaY22);

                            }
                            if (differenzaY2 < 286) {
                                layout2.getLayoutParams().height = 0;
                            }

                            if (differenzaY2 >= 286) {

                                layout2.getLayoutParams().height = differenzaY2 - 286;

                            }

Se avete letto il codice java si può capire che quando viene applicata pressione su un'immagine chiamata "tendina1"  si attiva la funzione che segna a ogni movimento la posizione Y del cursore dopo di che viene immessa a delle variabili e poi il valore di una variabile diventa il valore height della "tendina" (linearlayout) il problema è che questa "tendina" non segue le coordinate del cursore e quindi non si ingrandisce allora per provare ad inizio codice ho messo un:
Codice (Java): [Seleziona]
layout1.getLayoutParams().height = 670;e cosi si ingrandisce a mio volere quindi rimane da chiedersi: perché quando si deve allungare dinamicamente non si allunga?
la posizione del cursore viene captata perfettamente infatti il button che contiene il testo con le coordinate funziona:
http://gyazo.com/1555c23746576eddb08b5e0e05395a6e

Sono speranzoso che mi rispondiate grazie in anticipo a tutti o a nessuno.