Spróbuj użyć klasy TranslateAnimation , która tworzy animację dla zmian pozycji. Spróbuj przeczytać to, aby uzyskać pomoc - http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
Aktualizacja: Oto przykład. Jeśli masz wysokość swojego widoku na 50 iw trybie ukrywania chcesz pokazać tylko 10 pikseli. Przykładowy kod to -
TranslateAnimation anim=new TranslateAnimation(0,0,-40,0);
anim.setFillAfter(true);
view.setAnimation(anim);
PS: Istnieje wiele lub innych metod, które pomogą Ci użyć animacji zgodnie z Twoimi potrzebami. Przyjrzyj się również RelativeLayout.LayoutParams, jeśli chcesz całkowicie dostosować kod, jednak użycie TranslateAnimation jest łatwiejsze w użyciu.
EDYCJA: -Komplikowana wersja przy użyciu LayoutParams
RelativeLayout relParam=new RelativeLayout.LayoutParam(RelativeLayout.LayoutParam.FILL_PARENT,RelativeLayout.LayoutParam.WRAP_CONTENT); //you can give hard coded width and height here in (width,height) format.
relParam.topMargin=-50; //any number that work.Set it to 0, when you want to show it.
view.setLayoutParams(relparam);
Ten przykładowy kod zakłada, że umieszczasz swój widok w RelativeLayout, jeśli nie zmieniasz nazwy Layout, jednak inny układ może nie działać. Jeśli chcesz nadać im efekt animacji, powoli zmniejszaj lub zwiększaj górną margines. Możesz tam również rozważyć użycie Thread.sleep ().
Spróbuj tego.
view.animate() .translationY(0) .alpha(0.0f) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); view.setVisibility(View.GONE); } });
źródło
Przede wszystkim uzyskaj wysokość widoku, który chcesz zobaczyć i utwórz wartość logiczną do zapisania, jeśli widok jest wyświetlany:
int heigth=0; boolean showing=false; LinearLayout layout = (LinearLayout) view.findViewById(R.id.layout); proDetailsLL.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // gets called after layout has been done but before display // so we can get the height then hide the view proHeight = proDetailsLL.getHeight(); // Ahaha! Gotcha proDetailsLL.getViewTreeObserver().removeGlobalOnLayoutListener(this); proDetailsLL.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0)); } });
Następnie wywołaj metodę pokazującą ukryj widok i zmień wartość logiczną:
Metoda:
/** * Method to slide in out the layout * * @param isShowing * if the layout is showing * @param height * the height to slide * @param slideLL * the container to show */ private void slideInOutAnimation(boolean isShowing, int height, final LinearLayout slideLL, final ImageView arroIV) { if (!isShowing) { Animation animIn = new Animation() { protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); // Do relevant calculations here using the interpolatedTime that runs from 0 to 1 slideLL.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, (int) (heigth * interpolatedTime))); } }; animIn.setDuration(500); slideLL.startAnimation(animIn); } else { Animation animOut = new Animation() { protected void applyTransformation(float interpolatedTime, Transformation t) { super.applyTransformation(interpolatedTime, t); // Do relevant calculations here using the interpolatedTime that runs from 0 to 1 slideLL.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, (int) (heigth * (1 - interpolatedTime)))); } }; animOut.setDuration(500); slideLL.startAnimation(animOut); } }
źródło
ViewAnimator:
W XML:
<ViewAnimator android:id="@+id/animator_message" android:layout_width="match_parent" android:layout_height="match_parent" android:inAnimation="@anim/slide_down_text" android:outAnimation="@anim/slide_up_text"> <TextView android:id="@+id/text_message_authentication" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="message_error_authentication" /> <TextView android:id="@+id/text_message_authentication_connection" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="message_error_authentication_connection" /> <TextView android:id="@+id/text_message_authentication_empty" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="message_error_authentication_field_empty" /> </ViewAnimator>
Funkcje:
public void show(int viewId) { ViewAnimator animator = (ViewAnimator) findView(animatorId); View view = findViewById(viewId); if (animator.getDisplayedChild() != animator.indexOfChild(view)) { animator.setDisplayedChild(animator.indexOfChild(view)); } } private void showAuthenticationConnectionFailureMessage() { show(R.id.text_message_authentication_connection); }
źródło