স্ক্রিনের নীচে থেকে একটি বিন্যাস স্লাইড করুন


93

আমার ভিউ থেকে লুকানো একটি বিন্যাস আছে। একটি বোতামে ক্লিক করে আমি এটিটি নীচের দিক থেকে পুরো পর্দার সামগ্রীগুলি উপরের দিকে ঠেলে দিয়ে উপরে উঠতে চাই, কীভাবে হোয়াটস অ্যাপ চ্যাট স্ক্রিনে ইমোটিকন প্যানেল দেখায় to

আমি স্লাইডিংড্রেয়ারকে দেখেছি, যা আমার পক্ষে কাজ করে না। এটির জন্য একটি হ্যান্ডেল হিসাবে একটি চিত্র প্রয়োজন যা স্ক্রিনের কেন্দ্রস্থলে প্রদর্শিত হয়েছে, আমি এটি চাই না। এটি বিদ্যমান স্ক্রিন সামগ্রীতেও স্লাইড করে, আমি বিদ্যমান সামগ্রীটি উপরের দিকে সরানোর জন্য একটি উপায় খুঁজছি।

আপডেট 1:

সংকেত কচেলার পরামর্শ অনুসারে অ্যানিমেশনগুলি ব্যবহার করার চেষ্টা করেছি। তবে লুকানো বিন্যাস কখনও দেখানো হয় না। কোডটি এখানে।

লেআউট (ক্রিয়াকলাপ_মন.এক্সএমএল):

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

ক্রিয়াকলাপ (মেইনএকটিভিটি.জভা):

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

}

অ্যানিমেশন:

নীচে_আপ.এক্সএমএল:

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

নীচে_ডাউন.এক্সএমএল:

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

কোনও ধারণা কীভাবে এটি করা যেতে পারে?

ধন্যবাদ


4
আপনি কি উত্তর চেষ্টা করেছেন?
সংকেত কাছেলা

4
আপনার লেআউটটি লুকানো_প্যানেল অন্য লেআউটের পিছনে থাকতে পারে। hiddenPanel.bringToFront()অ্যানিমেশন শুরু করার আগে কল করুন এবং দেখুন এটি কার্যকর হয় কিনা। এছাড়াও আমাদের জানতে দিন, আপনি কি গ্রাফিকাল বিন্যাসে গোপন_প্যানেল ভিউ পেয়ে যাচ্ছেন activity_main.xml?
imthegiga

4
@ বাবারের অর্থ আপনি যখন স্লাইডিং আপ / ডাউন বোতামটিতে ক্লিক করেন তখন লুকানো বিন্যাসটি প্রসারিত করা বা সেই অনুসারে ভেঙে দেওয়া উচিত? আমি ফোন টাইপ স্লাইডার?
TheFlash

4
@ বাবর আমার উত্তর কি কাজ করে?
সুপারইউজার

4
আপনি github.com/Ali-Rezaei/SliderDrawer এ দেখতে পারেন , যা আপনাকে যে কোনও দিক থেকে স্লাইড করা সম্ভব করে তোলে।
আলী

উত্তর:


153

এই অ্যানিমেশনগুলি ব্যবহার করুন:

বটম_আপ.এক্সএমএল

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

নীচে_ডাউন.এক্সএমএল

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

আপনার ভিউটি লুকানোর / অ্যানিমেট করার জন্য এই ক্রিয়াকলাপটিতে এই কোডটি ব্যবহার করুন:

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

4
আমি উপরের কোডটি ব্যবহার করার চেষ্টা করেছি তবে লুকানো দৃশ্যটি কখনই প্রদর্শিত হয় নি। আমি প্রশ্নটি আপডেট করেছি এবং লেআউট এবং জাভা কোড যুক্ত করেছি। ধন্যবাদ
বাবর

4
.setVisibility(View.VISIBLE)আমার দিন বাঁচায়!
Si8

4
@ সংকেত হাই আমি আপনার কোডটি ব্যবহার করেছি এটি ভাল কাজ করে তবে আমাকে কিছুক্ষণ ঘুমানোর জন্য থ্রেড তৈরি করতে হবে তবে আমাকে নীচের অংশে এনিম ব্যবহার করতে হবে, তবে কীভাবে আপনি এটি করতে আমাকে সাহায্য করতে পারেন?
আনাস রেজা

4
আমি মনে করি আপনি স্টার্টঅফসেটটি ব্যবহার করতে পারবেন .. এই ডকটি দেখুন ডেভেলপার।
android.com/references/android/view/animation/…

6
অ্যানিমেশন শুরুর আগে একটি ফাঁকা জায়গা আছে যেখানে আমার ভিউ যাবে। কোন ধারণা ?
আনড্রয়েড

42

আপনি বন্ধ ছিল. মূলটি হ'ল লুকানো বিন্যাসটি match_parentউচ্চতা এবং ওজন উভয়ই স্ফীত করে । কেবল হিসাবে এটি শুরু View.GONE। এইভাবে, অ্যানিমেটারগুলিতে শতাংশ ব্যবহার করে সঠিকভাবে কাজ করে।

লেআউট (ক্রিয়াকলাপ_মন.এক্সএমএল):

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

ক্রিয়াকলাপ (মেইনএকটিভিটি.জভা):

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

}

আমি পরিবর্তন করেছি কেবলমাত্র অন্য জিনিস bottom_up.xml। পরিবর্তে

android:fromYDelta="75%p"

আমি ব্যবহার করতাম:

android:fromYDelta="100%p"

তবে এটি অগ্রাধিকারের বিষয়, আমি মনে করি।


এটি আমার পক্ষে কাজ করে না, লুকানো প্যানেল পপ আপ হয় তবে পর্দায় ইতিমধ্যে প্রদর্শিত পাঠ্যটি লুকানো ছিল এবং 'স্লাইড আপ / ডাউন' বোতামটি কোণ থেকে আড়াআড়িভাবে কেন্দ্রে চলে আসছিল।
বাবর

আপনি কী বলতে পারবেন যে স্লাইডিং লেআউটটি প্যারেন্ট লেআউটে অন্যান্য সমস্ত উপাদানকে কভার করতে পারে না? আমি আপনার কোডটি সফলভাবে প্রয়োগ করেছি। তবে আমার প্রয়োজনীয়তার জন্য আমি প্যারেন্ট লেআউটে কিছু অন্যান্য রৈখিক লেআউট যুক্ত করেছি। স্লাইডিং বিন্যাস উপস্থিত হওয়ার পরে, এটি এই লেআউটগুলি আবরণ করতে পারে না
গ্যাবি

@ গ্যাবি android:zAdjustment="top"আপনার নিজের Animationবা উপর সেট করার দরকার হতে পারে AnimtionSet
পল বার্ক

এটা কাজ করে না। আমার অ্যানিমগুলি এর মতো: <? এক্সএমএল সংস্করণ = "1.0" এনকোডিং = "ইউটিএফ -8"?> <সেট এক্সএমএনএলএস: অ্যান্ড্রয়েড = " স্কিমাস.অ্যান্ড্রয়েড / অ্যাপক / এক্স / অ্যান্ড্রয়েড "> <অ্যানড্রয়েড অনুবাদ করুন: থেকেYDelta = "0% পি" অ্যান্ড্রয়েড: টুডেল্টা = "100% পি" অ্যান্ড্রয়েড: ফিলএফটার = "ট্রু" অ্যান্ড্রয়েড: ইন্টারপোলটার = "@ অ্যান্ড্রয়েড: অ্যানিম / লিনিয়ার_ইন্টারপোলেটর" অ্যান্ড্রয়েড: সময়কাল = "400" অ্যান্ড্রয়েড: zAdjustment = "শীর্ষ" /> < / সেট>
গ্যাবি

4
এটি সঠিক উত্তর চিহ্নিত করা উচিত। ধন্যবাদ @ পলবুরকে
আরএমকে

9

আপনার অ্যাপ্লিকেশনটিতে আপনাকে কেবল কিছু লাইন যুক্ত করতে হবে, দয়া করে নীচের লিঙ্ক থেকে এটি সন্ধান করুন:

স্লাইড আপ / ডাউন অ্যানিমেশন সহ একটি ভিউ দেখান এবং লুকান

আপনার লেআউটটিতে কেবল এই জাতীয় একটি অ্যানিমেশন যুক্ত করুন:

mLayoutTab.animate()
  .translationYBy(120)
  .translationY(0)
  .setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime));

7

আমার জন্য শেষ পর্যন্ত কী কাজ করেছে তা এখানে।

লেআউটগুলি:

কার্যকলাপ_মাইন.এক্সএমএল

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

লুকানো_প্যানেল.এক্সএমএল

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

জাভা: প্যাকেজ 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.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);
    }
}
}

4
@ বাবর মূল কি
10

4
এটি মূল_স্ক্রিনকে encapsulating মূল লেআউট। দেখে মনে হচ্ছে যে অতিরিক্ত UI উপাদানগুলিকে আমি এখানে আটকানো কোড থেকে সরিয়ে দিয়ে শেষ করেছি। এটি লিনিয়ার বা আপেক্ষিক বিন্যাস ছিল।
বাবর

এটি একটি স্বীকৃত উত্তর এবং এর মূল উপাদান এবং কিছুই নেই ???? এটা কীভাবে গৃহীত হবে ??
জাহান সাফলোয়া

5

এই বিন্যাসটি ব্যবহার করুন। যদি আপনি সঙ্কুচিত মূল ভিউটি অ্যানিমেট করতে চান তবে আপনাকে লুকানো বারের উচ্চতায় অ্যানিমেশন যুক্ত করতে হবে, বারে অনুবাদ অ্যানিমেশনটি ব্যবহার করার পক্ষে এটি যথেষ্ট ভাল হতে পারে এবং এনিমেটের পরিবর্তে মূল দৃশ্যের উচ্চতা জাম্প থাকতে পারে jump

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

'স্লাইড আপ' বোতামে ক্লিক করে, আমি প্রোগ্রাম_আরূপে বিন্যাসের পদ্ধতিটি কল করে মেইনস্ক্রিনের অবস্থান এবং লুকানো প্যানেলটির অবস্থানটি উপরের দিকে পরিবর্তন করছি, তারপরে আমি গোপন দৃশ্যে স্টার্টএনিমেশন কল করছি। এটি লুকানো প্যানেলটিকে জায়গায় স্থান দেয়। তবে কোনও কারণে প্যানেলের ভিতরে থাকা বোতামটি প্রদর্শিত হচ্ছে না। প্যানেলটি খালি রয়েছে। কোন ক্লু বাটন কেন দেখাচ্ছে না?
বাবর

আপনার কেবল লুকানো প্যানেলের দৃশ্যমানতার দৃশ্যমানকে পরিবর্তন করা উচিত। আপনার বিবরণ থেকে, আমি অনুমান করছি যে বোতামটির দৃশ্যমানতা পরিবর্তন করা হয়েছিল, বা বোতামের প্রস্থ / উচ্চতা শূন্য
yoah

4

ঠিক আছে, দুটি সম্ভাব্য পন্থা আছে। সবচেয়ে সহজ - একটি স্লাইডিং মেনু লাইব্রেরি ব্যবহার করা । এটি নীচে স্লাইডিং মেনু তৈরি করতে দেয়, এটি নীচের অংশটিকে দৃশ্যমান করতে শীর্ষ পাত্রে অ্যানিমেট করতে পারে, এটি আপনার আঙুলের সাহায্যে এটিকে টেনে আনতে বা বোতামের (স্ট্যাটিকড্রেয়ার) মাধ্যমে প্রোগ্রামিয়ালি এনিমেট করা উভয়কেই সমর্থন করে।

আরও শক্ত উপায় - যদি আপনি অ্যানিমেশনগুলি ব্যবহার করতে চান তবে ইতিমধ্যে প্রস্তাবিত। অ্যানিমেশনগুলির সাথে আপনাকে অবশ্যই প্রথম লেআউট পরিবর্তন করতে হবে। সুতরাং আপনার লেআউটটি কোনও অ্যানিমেশন ছাড়াই চূড়ান্ত স্থিতিতে পরিবর্তন করার জন্য প্রথমে চেষ্টা করুন। কারণ খুব সম্ভবত যে আপনি রিলেটিভলআউটটিতে আপনার মতামতগুলি সঠিকভাবে রাখছেন না, সুতরাং আপনি নীচের দৃশ্যটি দেখানো সত্ত্বেও এটি শীর্ষের দ্বারা আবদ্ধ রয়ে গেছে। একবার আপনি যথাযথ বিন্যাসের পরিবর্তন অর্জন করলে - আপনাকে যা করতে হবে তা হ'ল লেআউটটির আগে অনুবাদগুলি মনে রাখা এবং অনুবাদ বিন্যাসের পরে লেআউটটি অনুবাদ করুন।


লুকানো প্যানেলের বোতামটি প্রদর্শিত হচ্ছে না, সম্ভবত প্যানেলটি স্ক্রিনটি বন্ধ ছিল। আমি যা করেছি তা লেআউটটি গোপন এবং স্ক্রিনে রেখে দেওয়া হয়েছিল, তারপরে এনিমেশনগুলি সঠিক স্থানে রাখতে ব্যবহার করা হয়েছিল।
বাবর

4
আমি মনে করি না স্লাইডিংমেনু নীচ থেকে অনুমতি দেয়; বাম, ডান শুধুমাত্র, আমি বিশ্বাস করি
wkhatch

4
@ ওয়াখ্যাচটি সঠিক, একটি বটম স্লাইডিংমেনু ব্যতিক্রমটি ছুঁড়েছে: "স্লাইডিংমেনু মোড অবশ্যই বাম, ডান বা LEFT_RIGHT হতে হবে" যা ডকুমেন্টেশনের সাথে সামঞ্জস্যপূর্ণ এবং এই উত্তরটির বিপরীতে রয়েছে।
আজ ওয়েস্ট

4

অ্যানিমেশন স্লাইড আপ করতে আমার কোড, এক্সএমএল ছাড়াই স্লাইড

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

স্লাইড ডাউন জন্য ব্যবহার

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

স্লাইড আপ জন্য

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

এখানে চিত্র বর্ণনা লিখুন


3

কোডটির নীচে এটি ব্যবহার করে দেখুন এটি খুব সংক্ষিপ্ত এবং সহজ।

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>

কার্যকলাপ_মাইন.এক্সএমএল

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

মেইনএ্যাকটিভিটি.জভা

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));
    }
}

চিত্রের নীচে_পরে নেভিগেশন


2

[ Https://stackoverflow.com/a/46644736/10249774] এর এক্সটেনশন হিসাবে এখানে একটি সমাধান রয়েছে

নীচের প্যানেলটি মূল সামগ্রীটিকে উপরের দিকে ঠেলে দিচ্ছে

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

কার্যকলাপ_মাইন.এক্সএমএল

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

প্রধান কাজ:

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

আপনি মাইনস্ক্রিন এবং অন্যান্য স্ক্রিনটি সংজ্ঞা দিতে পারেন যা আপনি টুকরো হিসাবে স্ক্রোল করতে চান। মাইনস্ক্রিনের বোতামটি চাপ দেওয়া হলে খণ্ডটি ক্রিয়াকলাপে একটি বার্তা প্রেরণ করবে যা মেনস্ক্রিনটিকে আপনি স্ক্রোল করতে এবং প্রতিস্থাপনটি অ্যানিমেট করতে চান তার সাথে প্রতিস্থাপন করবে।


4
আমি কেবল একবারে স্ক্রিনে এসে লুকিয়ে থাকা প্যানেল দ্বারা পর্দাটি উপরের দিকে ঠেলে দিতে চাই। আমি পর্দার সামগ্রী / টুকরো প্রতিস্থাপন করতে চাই না। আমি এনিমেশন এবং লেআউট টিঙ্কারিংয়ের সাথে এটির কাজ করতে সক্ষম হয়েছি।
বাবর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.