Autore Topic: Slide layout verso il basso  (Letto 442 volte)

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Slide layout verso il basso
« il: 04 Giugno 2014, 17:56:07 CEST »
0
Salve, ho creato una layout, che includo dentro la layout principale:

Codice (XML): [Seleziona]
<LinearLayout 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"
   tools:context=".MainActivity" >

    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_marginTop="100dp"
       android:orientation="vertical" >

        <include
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            layout="@layout/keyboard" />

        </LinearLayout>
</LinearLayout>

Adesso vorrei fare in modo che quando si "striscia" verso il basso col dito, sulla parte superiore della layout inclusa, quest'ultima scorra verso il basso fino a sparire.

Un po' come funziona nella calcolatrice standard delle recenti versioni di Android. Ho cercato su internet e ho trovato qualche libreria che permetteva qualcosa del genere, ma non trovo niente per quello che serve a me >:(

Come posso fare? Grazie mille in anticipo  :D
Vincenzo Cimino @ Google Play Store


Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:Slide layout verso il basso
« Risposta #1 il: 04 Giugno 2014, 22:02:48 CEST »
0
non sono un'esperto ma secondo me potresti usare GestureDetector  extends SimpleOnGestureListener e intercettare swipeBottom sul layout principale.

poi una volta intercettato lo swipe sposi il layout con animator.



Maverik @ Google Play Store

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:Slide layout verso il basso
« Risposta #2 il: 11 Giugno 2014, 15:44:18 CEST »
0
Ciao, avevo già fatto qualcosa del genere, ma al click su un bottone, così:

Codice (Java): [Seleziona]
public class MainActivity extends Activity {

private ViewGroup hiddenPanel;
private boolean isPanelShown;

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

    hiddenPanel = (ViewGroup)findViewById(R.id.hidden_panel);
    hiddenPanel.setVisibility(View.INVISIBLE);
    isPanelShown = false;
}

public void slideUpDown(final View view) {
    if(!isPanelShown) {
        // Show the panel
        Animation bottomUp = AnimationUtils.loadAnimation(this,
                R.anim.bottom_up);

        hiddenPanel.startAnimation(bottomUp);
        hiddenPanel.setVisibility(View.VISIBLE);
        isPanelShown = true;
    }
    else {
        // Hide the Panel
        Animation bottomDown = AnimationUtils.loadAnimation(this,
                R.anim.bottom_down);

        hiddenPanel.startAnimation(bottomDown);
        hiddenPanel.setVisibility(View.INVISIBLE);
        isPanelShown = false;
    }
}

}

In maniera tale che la RelativeLayout nascosta compaia al click sul bottone

Codice (XML): [Seleziona]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/main_screen"
   android:layout_width="wrap_content"
   android:layout_height="match_parent" >

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

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerInParent="true"
       android:text="@string/hello_world" />

    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:onClick="slideUpDown"
       android:text="Slide up / down" />

    <RelativeLayout
       android:id="@+id/hidden_panel"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignBottom="@+id/textView1"
       android:layout_alignParentLeft="true" >

        <Button
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@string/app_name" />
    </RelativeLayout>

</RelativeLayout>

Ma non ho ben capito come fare ad intercettare lo swipe sullo schermo  :-o Grazie mille, comunque per la risposta  :D
Vincenzo Cimino @ Google Play Store


Offline maverik1408

  • Utente junior
  • **
  • Post: 100
  • Respect: +1
    • Mostra profilo
    • MaverikApps
  • Dispositivo Android:
    NEXUS 5
  • Play Store ID:
    Maverik
Re:Slide layout verso il basso
« Risposta #3 il: 13 Giugno 2014, 09:13:01 CEST »
0
puoi fare qualcosa del genere

Codice: [Seleziona]

                RelativeLayout r = (RelativeLayout )findViewById(R.id.main_screen);
               
                r.setOnTouchListener(new View.OnTouchListener() {
                       
                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                // TODO Auto-generated method stub
                               
                                gestureDetector.onTouchEvent(event);
                                final int action = event.getAction();

                    switch (action) {
                        case MotionEvent.ACTION_DOWN:{
                            Log.v("Nav", "onDown");
                            break;
                        }
                        case MotionEvent.ACTION_UP:{
                            Log.v("Nav", "onUp");
                            break;
                        }
                    }

                    return true;
                        }
                });





questo è il gesture

Codice: [Seleziona]

final GestureDetector gestureDetector = new GestureDetector(mContext, new GestureDetector.OnGestureListener() {
               
                private static final int SWIPE_THRESHOLD = 100;
        private static final int SWIPE_VELOCITY_THRESHOLD = 100;
               
                @Override
                public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                                float velocityY) {
                        // TODO Auto-generated method stub
                        Log.d("GESTURE", "FLING");
                        boolean result = false;
            try {
                float diffY = e2.getY() - e1.getY();
                float diffX = e2.getX() - e1.getX();
                if (Math.abs(diffX) > Math.abs(diffY)) {
                    if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffX > 0) {
                                Log.d("GESTURE", "SWIPE RIGHT");
                                Toast.makeText(mContext, "RIGHT", Toast.LENGTH_SHORT).show();
                        } else {
                                Log.d("GESTURE", "SWIPE LEFT");
                                Toast.makeText(mContext, "LEFT", Toast.LENGTH_SHORT).show();
                        }
                    }
                } else {
                    if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                        if (diffY > 0) {
                                Log.d("GESTURE", "SWIPE BOTTOM");
                                Toast.makeText(mContext, "BOTTOM", Toast.LENGTH_SHORT).show();
                        } else {
                                Log.d("GESTURE", "SWIPE UP");
                                Toast.makeText(mContext, "UP", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            } catch (Exception exception) {
                exception.printStackTrace();
            }
            return result;
                }

                @Override
                public boolean onDown(MotionEvent e) {
                        // TODO Auto-generated method stub
                        return false;
                }

                @Override
                public void onShowPress(MotionEvent e) {
                        // TODO Auto-generated method stub
                       
                }

                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                        // TODO Auto-generated method stub
                        return false;
                }

                @Override
                public boolean onScroll(MotionEvent e1, MotionEvent e2,
                                float distanceX, float distanceY) {
                        // TODO Auto-generated method stub
                        return false;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                        // TODO Auto-generated method stub
                       
                }
               
               
        });

Maverik @ Google Play Store

Offline Vincenzoz

  • Utente junior
  • **
  • Post: 122
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    Vincenzo Cimino
  • Sistema operativo:
    Windows 7
Re:Slide layout verso il basso
« Risposta #4 il: 17 Giugno 2014, 17:35:56 CEST »
0
Grazie mille, ho risolto proprio con un GestureDetector, avviando l'animazione quando si striscia verso il basso la layout  :D
Vincenzo Cimino @ Google Play Store