Bir düzeni ekranın altından yukarı kaydırın


93

Görünümden gizlenmiş bir düzenim var. Bir düğme tıklamasında, whatsapp'ın sohbet ekranında ifadeler panelini göstermesine çok benzer şekilde, tüm ekran içeriğini yukarı iterek alttan yukarı kaymasını istiyorum.

Benim için işe yaramayan SlidingDrawer'ı gördüm. Ekranın ortasında gösterilen bir tutamaç olarak bir görüntü gerektirir, bunu istemiyorum. Ayrıca mevcut ekran içeriği üzerinde kayıyor, mevcut içeriği yukarı taşımanın bir yolunu arıyorum.

Güncelleme 1:

Animasyonları Sanket Kachhela'nın önerdiği şekilde kullanmayı denedim. Ancak gizli düzen asla gösterilmez. İşte kod.

Düzen (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>

Etkinlik (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;
    }
}

}

Animasyonlar:

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>

Bunun nasıl yapılacağına dair bir fikrin var mı?

Teşekkürler.


1
cevap vermeyi denedin mi
Sanket Kachhela

1
Hidden_panel düzeniniz başka bir düzenin arkasına geçiyor olabilir. hiddenPanel.bringToFront()Animasyonu başlatmadan önce arayın ve çalışıp çalışmadığını görün. Ayrıca bize bildirin, için grafik düzende hidden_panel görünümü alıyor musunuz activity_main.xml?
imthegiga

1
@Babar, yukarı / aşağı kaydırma düğmesine tıkladığınızda gizli düzenin buna göre genişletilmesi veya daraltılması gerektiği anlamına gelir mi? Telefon türü kaydırıcısı?
TheFlash

1
@Babar cevabım işe yarıyor mu?
superuser

1
Herhangi bir taraftan kaymanızı mümkün kılan github.com/Ali-Rezaei/SlidingDrawer'a bakabilirsiniz .
Ali

Yanıtlar:


153

Bu animasyonları kullanın:

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>

Görünümünüzü gizlemek / hareketlendirmek için etkinliğinizde bu kodu kullanın:

Animation bottomUp = AnimationUtils.loadAnimation(getContext(),
            R.anim.bottom_up);
ViewGroup hiddenPanel = (ViewGroup)findViewById(R.id.hidden_panel);
hiddenPanel.startAnimation(bottomUp);
hiddenPanel.setVisibility(View.VISIBLE);

1
Yukarıdaki kodu kullanmayı denedim ama gizli görünüm hiç görünmedi. Soruyu güncelledim ve düzeni ve java kodunu ekledim. Teşekkürler.
Babar

2
.setVisibility(View.VISIBLE)günümü kurtardım!
Si8

1
@sanket merhaba Kodunuzu kullandım, iyi çalışıyor ama bir süre uyumak için iş parçacığı yapmam gerekiyor, sonra aşağıdan aşağıya animasyon kullanmam gerekiyor, bu yüzden bunu nasıl yapacağımı öğrenebilir misin?
Anas Reza

1
startOffset'i kullanabileceğinizi düşünüyorum .. bu belgeye bakın developer.android.com/reference/android/view/animation/…
Sanket Kachhela

6
Animasyon başlamadan önce benim görüşümün gideceği boş bir alan var. Herhangi bir fikir ?
An-droid

42

Sen yakındın. Anahtar, gizli düzenin match_parenthem boy hem de ağırlık olarak şişmesidir. Basitçe başlayın View.GONE. Bu şekilde animatörlerde yüzdeyi kullanmak düzgün çalışır.

Düzen (activity_main.xml):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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:layout_alignParentTop="true"
        android:text="@string/hello_world" />

    <TextView
        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="match_parent"
        android:background="@android:color/white"
        android:visibility="gone" >

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

</RelativeLayout>

Etkinlik (MainActivity.java):

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;

public class OffscreenActivity extends Activity {
    private View hiddenPanel;

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

        hiddenPanel = findViewById(R.id.hidden_panel);
    }

    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);
        }
        else {
            // Hide the Panel
            Animation bottomDown = AnimationUtils.loadAnimation(this,
                    R.anim.bottom_down);

            hiddenPanel.startAnimation(bottomDown);
            hiddenPanel.setVisibility(View.GONE);
        }
    }

    private boolean isPanelShown() {
        return hiddenPanel.getVisibility() == View.VISIBLE;
    }

}

Değiştirdiğim tek şey başka bir şeydi bottom_up.xml. Onun yerine

android:fromYDelta="75%p"

Kullandım:

android:fromYDelta="100%p"

Ama bu bir tercih meselesi sanırım.


Bu benim için işe yaramadı, gizli panel açılıyor, ancak ekranda zaten gösterilen metin gizleniyor ve 'yukarı / aşağı kaydır' düğmesi yatay olarak köşeden ekranın ortasına doğru hareket ediyordu.
Babar

Kayar düzenin neden üst düzendeki diğer tüm bileşenleri kapsamadığını söyleyebilir misiniz? Kodunuzu başarıyla uyguladım. Ancak gereksinimlerim için ana yerleşim düzenine başka doğrusal düzenler ekledim. Ancak kayan düzen göründüğünde, bu düzenleri kapsayamaz
gabby

@gabby Sen ayarlamanız gerekebilir android:zAdjustment="top"senin üzerinde Animationveya AnimtionSet.
Paul Burke

işe yaramadı. . animasyonlarım şuna benzer: <? xml version = "1.0" encoding = "utf-8"?> <set xmlns: android = " 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 = "400" android: zAdjustment = "top" /> < / set>
gabby

3
Bu doğru cevap olarak işaretlenmelidir. Teşekkürler @PaulBurke
RmK


7

İşte sonunda benim için işe yarayan şey.

Düzenler:

activity_main.xml

<RelativeLayout
    android:id="@+id/main_screen"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true"
    android:layout_alignParentBottom="true">

    <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:id="@+id/slideButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Slide up / down"
        android:layout_alignParentBottom="true" 
        android:onClick="slideUpDown"/>

</RelativeLayout>

hidden_panel.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/hidden_panel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Test" />
</LinearLayout>

Java: com.example.slideuplayout paketi;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;

public class MainActivity extends Activity {

private ViewGroup hiddenPanel;
private ViewGroup mainScreen;
private boolean isPanelShown;
private ViewGroup root;

int screenHeight = 0;

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

    mainScreen = (ViewGroup)findViewById(R.id.main_screen);
    ViewTreeObserver vto = mainScreen.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
            screenHeight = mainScreen.getHeight();
            mainScreen.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        } 
    }); 

    root = (ViewGroup)findViewById(R.id.root);

    hiddenPanel = (ViewGroup)getLayoutInflater().inflate(R.layout.hidden_panel, root, false);
    hiddenPanel.setVisibility(View.INVISIBLE);

    root.addView(hiddenPanel);

    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
        mainScreen.layout(mainScreen.getLeft(),
                          mainScreen.getTop() - (screenHeight * 25/100), 
                          mainScreen.getRight(),
                          mainScreen.getBottom() - (screenHeight * 25/100));



        hiddenPanel.layout(mainScreen.getLeft(), mainScreen.getBottom(), mainScreen.getRight(), screenHeight);
        hiddenPanel.setVisibility(View.VISIBLE);

        Animation bottomUp = AnimationUtils.loadAnimation(this,
                R.anim.bottom_up);

        hiddenPanel.startAnimation(bottomUp);

        isPanelShown = true;
    }
    else {
        isPanelShown = false;

        // Hide the Panel
        Animation bottomDown = AnimationUtils.loadAnimation(this,
                R.anim.bottom_down);
        bottomDown.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationRepeat(Animation arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation arg0) {
                isPanelShown = false;

                mainScreen.layout(mainScreen.getLeft(),
                          mainScreen.getTop() + (screenHeight * 25/100), 
                          mainScreen.getRight(),
                          mainScreen.getBottom() + (screenHeight * 25/100));

                hiddenPanel.layout(mainScreen.getLeft(), mainScreen.getBottom(), mainScreen.getRight(), screenHeight);
            }
        });
        hiddenPanel.startAnimation(bottomDown);
    }
}
}

1
@Babar kök nedir
1baga

1
Main_screen'i çevreleyen ana düzendir. Görünüşe göre fazla UI öğelerini kaldırmaya çalışırken, onu buraya yapıştırdığım koddan kaldırdım. Ya Doğrusal ya da Göreceli düzendi.
Babar

Kabul edilen bir cevap ve kök öğeye sahip değil ve hiçbir şey yok ???? bu nasıl kabul edilebilir?
Zahan Safallwa

5

Bu düzeni kullanın. Ana görünümün küçülmesini canlandırmak istiyorsanız, gizli çubuğun yüksekliğine animasyon eklemeniz gerekir, satın almak, çubuktaki çeviri animasyonunu kullanmak için yeterince iyi olabilir ve animasyon yerine ana görünümün yüksekliğinin atlamasını sağlayın.

<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"
android:orientation="vertical" >

<RelativeLayout
    android:id="@+id/main_screen"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >

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

    <TextView
        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>

<RelativeLayout
    android:id="@+id/hidden_panel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="#fcc"
    android:visibility="visible" >

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

</LinearLayout>

'Yukarı kaydır' düğmesi tıklandığında, düzen yöntemini çağırarak ana_ekranın ve gizli panelin konumunu programlı olarak değiştiriyorum, ardından gizli görünümde startAnimation'ı çağırıyorum. Bu, gizli panelin yerine açılmasını sağlar. Ancak bazı nedenlerden dolayı panelin içindeki düğme görünmüyor. Panel boş. Düğmenin neden görünmediğine dair bir ipucu var mı?
Babar

Gizli panelin görünürlüğünü görünür olarak değiştirmelisiniz. Açıklamanıza göre, düğme görünürlüğünün değiştiğini veya düğme genişliğinin / yüksekliğinin sıfır olduğunu tahmin ediyorum
yoah

4

Tamam, iki olası yaklaşım var. En basit olanı, kayan bir menü kitaplığı kullanmaktır . Alt kayan menü oluşturmaya izin verir, üst konteyneri altını görünür kılmak için canlandırabilir, hem parmağınızla sürüklemeyi veya düğme (StaticDrawer) ile programlı olarak canlandırmayı destekler.

Daha zor yol - Animasyonları daha önce önerildiği gibi kullanmak istiyorsanız. Animasyonlarla ÖNCE düzenlerinizi değiştirmelisiniz. Bu nedenle, önce herhangi bir animasyon olmadan düzeninizin son durumuna geçmesini sağlayın. Görünümlerinizi RelativeLayout'ta düzgün bir şekilde düzenlemiyor olmanız çok muhtemel olduğundan, alt görünümünüzü gösterseniz bile, üstteki görünüm gizli kalır. Düzgün bir düzen değişikliğini elde ettiğinizde - yapmanız gereken tek şey, düzenden önce çevirileri hatırlamak ve düzenden SONRA çeviri animasyonunu uygulamaktır.


gizli paneldeki düğme görünmüyordu, muhtemelen panel ekran dışında olduğu için. Yaptığım şey düzeni gizli ve ekranda tutmaktı, ardından animasyonları kullanarak doğru yere yerleştirdim.
Babar

4
SlidingMenu'nun alttan izin verdiğini sanmıyorum; sol, yalnızca sağ, inanıyorum
wkhatch

2
@wkhatch doğrudur, bir BOTTOM SlidingMenu istisna atar: "SlidingMenu modu, dokümantasyonla uyumlu ve bu cevaba aykırı olan LEFT, RIGHT veya LEFT_RIGHT olmalıdır".
ajwest

4

Animasyonu XML olmadan yukarı kaydırmak için kodum

private static ObjectAnimator createBottomUpAnimation(View view,
        AnimatorListenerAdapter listener, float distance) {
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationY", -distance);
//        animator.setDuration(???)
    animator.removeAllListeners();
    if (listener != null) {
        animator.addListener(listener);
    }
    return animator;
}

public static ObjectAnimator createTopDownAnimation(View view, AnimatorListenerAdapter listener,
        float distance) {
    view.setTranslationY(-distance);
    ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationY", 0);
    animator.removeAllListeners();
    if (listener != null) {
        animator.addListener(listener);
    }
    return animator;
}

Aşağı kaydırmak için kullanma

createTopDownAnimation(myYellowView, null, myYellowView.getHeight()).start();

Yukarı kaydırmak için

createBottomUpAnimation(myYellowView, null, myYellowView.getHeight()).start();

görüntü açıklamasını buraya girin


3

Aşağıdaki kodu deneyin, Çok kısa ve basit.

transalate_anim.xml

<?xml version="1.0" encoding="utf-8"?><!-- Copyright (C) 2013 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="4000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:repeatCount="infinite"
        android:toXDelta="0"
        android:toYDelta="-90%p" />

    <alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="4000"
        android:fromAlpha="0.0"
        android:repeatCount="infinite"
        android:toAlpha="1.0" />
</set>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.naveen.congratulations.MainActivity">


    <ImageView
        android:id="@+id/image_1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginBottom="8dp"
        android:layout_marginStart="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:srcCompat="@drawable/balloons" />
</android.support.constraint.ConstraintLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ImageView imageView1 = (ImageView) findViewById(R.id.image_1);
        imageView1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startBottomToTopAnimation(imageView1);
            }
        });

    }

    private void startBottomToTopAnimation(View view) {
        view.startAnimation(AnimationUtils.loadAnimation(this, R.anim.translate_anim));
    }
}

görüntünün bottom_up_navigation


2

İşte [ https://stackoverflow.com/a/46644736/10249774] uzantısı olarak bir çözüm

Alt panel ana içeriği yukarı doğru itiyor

https://imgur.com/a/6nxewE0

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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">
<Button
    android:id="@+id/my_button"
    android:layout_marginTop="10dp"
    android:onClick="onSlideViewButtonClick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/main_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal">
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="main "
    android:textSize="70dp"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="main "
    android:textSize="70dp"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="main "
    android:textSize="70dp"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="main"
    android:textSize="70dp"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="main"
    android:textSize="70dp"/>
</LinearLayout>
<LinearLayout
    android:id="@+id/footer_view"
    android:background="#a6e1aa"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_alignParentBottom="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="footer content"
        android:textSize="40dp" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="footer content"
        android:textSize="40dp" />
  </LinearLayout>
</RelativeLayout>

Ana aktivite:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
private Button myButton;
private View footerView;
private View mainView;
private boolean isUp;
private int anim_duration = 700;

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

    footerView = findViewById(R.id.footer_view);
    mainView = findViewById(R.id.main_view);
    myButton = findViewById(R.id.my_button);

    // initialize as invisible (could also do in xml)
    footerView.setVisibility(View.INVISIBLE);
    myButton.setText("Slide up");
    isUp = false;
}
public void slideUp(View mainView , View footer_view){
    footer_view.setVisibility(View.VISIBLE);
    TranslateAnimation animate_footer = new TranslateAnimation(
            0,                 // fromXDelta
            0,                 // toXDelta
            footer_view.getHeight(),  // fromYDelta
            0);                // toYDelta
    animate_footer.setDuration(anim_duration);
    animate_footer.setFillAfter(true);
    footer_view.startAnimation(animate_footer);

    mainView.setVisibility(View.VISIBLE);
    TranslateAnimation animate_main = new TranslateAnimation(
            0,                 // fromXDelta
            0,                 // toXDelta
            0,  // fromYDelta
            (0-footer_view.getHeight()));                // toYDelta
    animate_main.setDuration(anim_duration);
    animate_main.setFillAfter(true);
    mainView.startAnimation(animate_main);
}
public void slideDown(View mainView , View footer_view){
    TranslateAnimation animate_footer = new TranslateAnimation(
            0,                 // fromXDelta
            0,                 // toXDelta
            0,                 // fromYDelta
            footer_view.getHeight()); // toYDelta
    animate_footer.setDuration(anim_duration);
    animate_footer.setFillAfter(true);
    footer_view.startAnimation(animate_footer);


    TranslateAnimation animate_main = new TranslateAnimation(
            0,                 // fromXDelta
            0,                 // toXDelta
            (0-footer_view.getHeight()),  // fromYDelta
            0);                // toYDelta
    animate_main.setDuration(anim_duration);
    animate_main.setFillAfter(true);
    mainView.startAnimation(animate_main);
}

public void onSlideViewButtonClick(View view) {
    if (isUp) {
        slideDown(mainView , footerView);
        myButton.setText("Slide up");
    } else {
        slideUp(mainView , footerView);
        myButton.setText("Slide down");
    }
    isUp = !isUp;
}
}

1

Yukarı kaydırmak istediğiniz ana ekranı ve diğer ekranı parçalar halinde tanımlayabilirsiniz. Ana ekrandaki düğmeye basıldığında, parça, etkinliğe bir mesaj gönderecek ve ardından ana ekranı yukarı kaydırmak istediğiniz ekranla değiştirecek ve değiştirmeyi canlandıracaktır.


1
Ekranda göründüğünde ekranın gizli panel tarafından yukarı itilmesini istiyorum. Ekran içeriğini / parçalarını değiştirmek istemiyorum. Animasyonlar ve düzen düzeltmeleri ile çalıştırmayı başardım.
Babar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.