Ich habe ein Layout vor der Ansicht versteckt. Wenn Sie auf eine Schaltfläche klicken, soll sie von unten nach oben verschoben werden und den gesamten Bildschirminhalt nach oben verschieben, ähnlich wie WhatsApp das Emoticons-Bedienfeld im Chat-Bildschirm anzeigt.
Ich habe SlidingDrawer gesehen, das funktioniert bei mir nicht. Es erfordert ein Bild als Griff, das in der Mitte des Bildschirms angezeigt wird. Das möchte ich nicht. Es gleitet auch über den vorhandenen Bildschirminhalt. Ich suche nach einer Möglichkeit, den vorhandenen Inhalt nach oben zu verschieben.
Update 1:
Ich habe versucht, die von Sanket Kachhela vorgeschlagenen Animationen zu verwenden. Das versteckte Layout wird jedoch nie angezeigt. Hier ist der Code.
Layout (activity_main.xml):
<RelativeLayout
android:id="@+id/main_screen"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_alignParentTop="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:layout_centerInParent="true"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Slide up / down"
android:layout_alignParentBottom="true"
android:onClick="slideUpDown"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/hidden_panel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/main_screen">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
</RelativeLayout>
Aktivität (MainActivity.java):
package com.example.slideuplayout;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
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;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
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;
}
}
}
Animationen:
bottom_up.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="75%p"
android:toYDelta="0%p"
android:fillAfter="true"
android:duration="500" />
</set>
bottom_down.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromYDelta="0%p"
android:toYDelta="100%p"
android:fillAfter="true"
android:interpolator="@android:anim/linear_interpolator"
android:duration="500" />
</set>
Irgendwelche Ideen, wie das gemacht werden kann?
Vielen Dank.
hiddenPanel.bringToFront()
bevor Sie mit der Animation beginnen, und prüfen Sie, ob sie funktioniert. Lassen Sie uns auch wissen, ob Sie die Ansicht hidden_panel im grafischen Layout für erhaltenactivity_main.xml
.Antworten:
Verwenden Sie diese Animationen:
bottom_up.xml
bottom_down.xml
Verwenden Sie diesen Code in Ihrer Aktivität, um Ihre Ansicht auszublenden / zu animieren:
quelle
.setVisibility(View.VISIBLE)
hat meinen Tag gerettet!Du warst nah. Der Schlüssel ist, dass das verborgene Layout
match_parent
sowohl in der Größe als auch im Gewicht aufgeblasen wird . Starten Sie es einfach alsView.GONE
. Auf diese Weise funktioniert die Verwendung des Prozentsatzes in den Animatoren ordnungsgemäß.Layout (activity_main.xml):
Aktivität (MainActivity.java):
Das einzige, was ich geändert habe, war in
bottom_up.xml
. AnstattIch benutzte:
Aber das ist wohl eine Frage der Präferenz.
quelle
android:zAdjustment="top"
auf IhremAnimation
oder einstellenAnimtionSet
.Sie müssen nur eine Zeile in Ihre App einfügen. Diese finden Sie unter folgendem Link:
Ein- und Ausblenden einer Ansicht mit einer Animation nach oben / unten
Fügen Sie Ihrem Layout einfach eine Animation wie folgt hinzu:
quelle
Hier ist, was am Ende für mich funktioniert hat.
Layouts:
activity_main.xml
hidden_panel.xml
Java: Paket com.example.slideuplayout;
quelle
Verwenden Sie dieses Layout. Wenn Sie das Verkleinern der Hauptansicht animieren möchten, müssen Sie der Höhe der ausgeblendeten Leiste eine Animation hinzufügen. Kaufen Sie diese möglicherweise, um die Übersetzungsanimation für die Leiste zu verwenden, und lassen Sie die Höhe der Hauptansicht springen, anstatt sie zu animieren.
quelle
Ok, es gibt zwei mögliche Ansätze. Am einfachsten ist es, ein Schiebemenü zu verwenden verwenden. Es ermöglicht das Erstellen eines unteren Schiebemenüs, es kann den oberen Container animieren, um den unteren sichtbar zu machen, es unterstützt sowohl das Ziehen mit dem Finger als auch das programmgesteuerte Animieren über die Schaltfläche (StaticDrawer).
Schwieriger - wenn Sie Animationen verwenden möchten, wie bereits vorgeschlagen. Bei Animationen müssen Sie ZUERST Ihre Layouts ändern. Versuchen Sie also zunächst, Ihr Layout ohne Animationen in den endgültigen Zustand zu versetzen. Da es sehr wahrscheinlich ist, dass Sie Ihre Ansichten in RelativeLayout nicht richtig anordnen, bleibt die Ansicht von unten verdeckt, obwohl Sie Ihre Ansicht von unten anzeigen. Sobald Sie die richtige Layoutänderung erreicht haben, müssen Sie sich nur noch die Übersetzungen vor dem Layout merken und die Übersetzungsanimation NACH dem Layout anwenden.
quelle
Mein Code, damit die Animation ohne XML nach oben und unten gleitet
Verwenden für For nach unten schieben
Zum Hochrutschen
quelle
Versuchen Sie diesen folgenden Code, es ist sehr kurz und einfach.
transalate_anim.xml
activity_main.xml
MainActivity.java
quelle
Hier ist eine Lösung als Erweiterung von [ https://stackoverflow.com/a/46644736/10249774]
Das untere Bedienfeld drückt den Hauptinhalt nach oben
https://imgur.com/a/6nxewE0
activity_main.xml
Hauptaktivität:
quelle
Sie können den Hauptbildschirm und den anderen Bildschirm, nach dem Sie scrollen möchten, als Fragmente definieren. Wenn die Schaltfläche auf dem Hauptbildschirm gedrückt wird, sendet das Fragment eine Nachricht an die Aktivität, die dann den Hauptbildschirm durch den ersetzt, den Sie nach oben scrollen und den Ersatz animieren möchten.
quelle