بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
اعمال انیمیشن بر روی ویو خاص
سلام دوستان وقت بخیر.بعد از مدتی به دنیای اندروید برگشتم . توی مبحث انیمیشن به مشکلی برخوردم که امیدوارم لطفتون رو دریغ نکنید.
توی یه اکتیویتی دو لایه دارم که قصد دارم با تاچ لایه دوم لایه بالاتر که مخفی بوده نمایش داده بشه و با تاچ بعدی لایه بالایی مخفی بشه (شبیه به toggle در jquery) اما یه مشکلی وجود داره و مختصات موقعیت لایه پایینتر جابجا میشه و همچنین این انیمیشن روان نیست.ممنون میشم بنده رو یاری کنید. کد , تصویر و لینک پروژه رو میذارم
اینم لینک
اینم کد:
public class Tab2Activity extends Activity {
public LinearLayout layoutTop;
public LinearLayout layoutBottom;
boolean show = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layoutTop = (LinearLayout) findViewById(R.id.layoutTop);
layoutBottom = (LinearLayout) findViewById(R.id.layoutButtom);
layoutBottom.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if ( !show) {
doShow();
} else {
doHide();
}
}
});
}
private void doShow() {
show = true;
Log.i("LOG", "msg");
TranslateAnimation slide = new TranslateAnimation(0, 0, -(layoutTop.getHeight()), 0);
TranslateAnimation slider = new TranslateAnimation(0, 0, 0, layoutTop.getHeight());
slide.setDuration(700);
slide.setFillAfter(true);
slider.setDuration(700);
slider.setFillAfter(true);
layoutTop.startAnimation(slide);
layoutBottom.startAnimation(slider);
slide.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) {
layoutTop.setVisibility(View.VISIBLE);
}
});
}
private void doHide() {
show = false;
TranslateAnimation slide = new TranslateAnimation(0, 0, 0, -(layoutTop.getHeight()));
TranslateAnimation slider = new TranslateAnimation(0, 0, layoutTop.getHeight(), 0);
slide.setDuration(700);
slide.setFillAfter(true);
slider.setDuration(700);
slider.setFillAfter(true);
layoutTop.startAnimation(slide);
layoutBottom.startAnimation(slider);
slide.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) {
layoutTop.setVisibility(View.GONE);
}
});
}
}
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
sadeghbarout
11 سال پیش
+3
0
من چند مدت پیش به یه همچین افکتی نیاز داشتم که بتونه یه linearLayout رو با انیمیشن باز و بسته کنه (فکر کنم دقیقا مثل همین چیزیه که شما میخواید)
بعد کلی جستجو در اینترنت :
public class ResizeAnimate {
public static void expand(final View v) {
v.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
final int targtetHeight = v.getMeasuredHeight();
v.getLayoutParams().height = 0;
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) (targtetHeight * interpolatedTime);
v.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
// 1dp/ms
a.setDuration((int) (targtetHeight / 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);
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .