9 ŞUBAT 2011, ÇARŞAMBA
Android:/daralt animasyon Genişletin
Hadi dikey bir linearLayout ki :
[v1]
[v2]
Varsayılan v1 sahiptir visibily = GİTTİ. Bir animasyon genişletmek ve aynı anda itin v2 ile v1 göstermek istiyorum.
Böyle bir şey denedim:
Animation a = new Animation()
{
int initialHeight;
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final int newHeight = (int)(initialHeight * interpolatedTime);
v.getLayoutParams().height = newHeight;
v.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
initialHeight = height;
}
@Override
public boolean willChangeBounds() {
return true;
}
};
Ama bu çözüm, animasyon başladığında bir göz kırpma var. V1 animasyon uygulanmadan önce tam boy göstererek neden olduğunu düşünüyorum.
Javascript ile jQuery bir çizgi vardır! Android ile bunu yapmak için herhangi bir basit bir yolu?
CEVAP
14 Kasım 2012, ÇARŞAMBA
Bu soru benim gerçek çözüm sonrası çok popüler oldu görüyorum. Ana avantajı animasyon uygulamak için genişletilmiş yüksekliği bilmek zorunda değilsin ve görünümü genişletilmiş sonra, içerik değişirse yükseklik uyarlar. Benim için harika çalışıyor.
public static void expand(final View v) {
v.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
final int targetHeight = v.getMeasuredHeight();
// Older versions of android (pre API 21) cancel animations for views with a height of 0.
v.getLayoutParams().height = 1;
v.setVisibility(View.VISIBLE);
Animation a = new Animation()
{
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
v.getLayoutParams().height = interpolatedTime == 1
? LayoutParams.WRAP_CONTENT
: (int)(targetHeight * interpolatedTime);
v.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
// 1dp/ms
a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density));
v.startAnimation(a);
}
public static void collapse(final View v) {
final int initialHeight = v.getMeasuredHeight();
Animation a = new Animation()
{
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
if(interpolatedTime == 1){
v.setVisibility(View.GONE);
}else{
v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
v.requestLayout();
}
}
@Override
public boolean willChangeBounds() {
return true;
}
};
// 1dp/ms
a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
v.startAnimation(a);
}
Bunu Paylaş:
Android sayfa Curl animasyon...
android animasyon onAnimationEnd bitmi...
Nasıl Android bir etkinlik ararken ani...
Android - parça işlem Özel Animasyon ç...
Nasıl Yanı ya da Android Liste Görünüm...