Man ir LinearLayout
, kuru vēlos parādīt vai paslēpt ar Animation
, kas pārvieto izkārtojumu uz augšu vai uz leju, kad mainu tā redzamību.
Es esmu redzējis dažus paraugus, bet neviens no tiem neatbilst manām vajadzībām.
Esmu izveidojis divus xml failus animācijām, bet nezinu, kā tās palaist, kad mainu LinearLayout
redzamību.
Izmantojot jauno animācijas API, kas tika ieviests operētājsistēmā Android 3.0 (Honeycomb), ir ļoti vienkārši izveidot šādas animācijas.
Skatāma Pārskata
bīdīšana uz leju par noteiktu attālumu:
view.animate().translationY(distance);
Vēlāk View
var novietot atpakaļ sākotnējā pozīcijā šādi:
view.animate().translationY(0);
Varat arī viegli apvienot vairākas animācijas. Tālāk redzamā animācija slaidinās View
uz leju pēc tā augstuma un vienlaikus to izpludinās:
// Prepare the View for the animation
view.setVisibility(View.VISIBLE);
view.setAlpha(0.0f);
// Start the animation
view.animate()
.translationY(view.getHeight())
.alpha(1.0f)
.setListener(null);
Pēc tam jūs varat atkal izpludināt Pogu
un slaidināt to atpakaļ uz sākotnējo pozīciju. Mēs arī iestatām AnimatorListener
, lai pēc animācijas pabeigšanas varētu iestatīt View
redzamību atpakaļ uz GONE
:
view.animate()
.translationY(0)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.setVisibility(View.GONE);
}
});
Jūs varat palaist pareizo Animāciju
, kad mainās LinearLayout
redzamība, izveidojot jaunu LinearLayout
apakšklasi un pārrakstot setVisibility()
, lai palaistu Animāciju
. Apsveriet kaut ko līdzīgu šādam:
public class SimpleViewAnimator extends LinearLayout
{
private Animation inAnimation;
private Animation outAnimation;
public SimpleViewAnimator(Context context)
{
super(context);
}
public void setInAnimation(Animation inAnimation)
{
this.inAnimation = inAnimation;
}
public void setOutAnimation(Animation outAnimation)
{
this.outAnimation = outAnimation;
}
@Override
public void setVisibility(int visibility)
{
if (getVisibility() != visibility)
{
if (visibility == VISIBLE)
{
if (inAnimation != null) startAnimation(inAnimation);
}
else if ((visibility == INVISIBLE) || (visibility == GONE))
{
if (outAnimation != null) startAnimation(outAnimation);
}
}
super.setVisibility(visibility);
}
}
if (filter_section.getVisibility() == View.GONE) {
filter_section.animate()
.translationY(filter_section.getHeight()).alpha(1.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
filter_section.setVisibility(View.VISIBLE);
filter_section.setAlpha(0.0f);
}
});
} else {
filter_section.animate()
.translationY(0).alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
filter_section.setVisibility(View.GONE);
}
});
}