如何动画布局的宽度和高度? [英] How to animate the width and height of a Layout?
问题描述
我有一个的LinearLayout
这是通过隐藏在的onClick
其他布局和视图扩大到全屏。有一个 RelativeLayout的
上方的LinearLayout
I have a LinearLayout
which is expanded to full screen by hiding all other layouts and views on onClick
. There is a Relativelayout
above LinearLayout
我想申请自定义动画在此。大小应应缓慢增加(如在500毫秒)。
I want to apply custom animation on this. The size should should increase slowly (like in 500 milli seconds).
但我怀疑这可能吗?谢谢你。
But I doubt is it possible? Thanks.
下面是我在做什么的onClick
:
private void expandView (int viewId) {
RelativeLayout relativeLayout = (RelativeLayout) ((LinearLayout) view.findViewById(viewId)).getParent();
ViewGroup.MarginLayoutParams rlMargin = (ViewGroup.MarginLayoutParams) relativeLayout.getLayoutParams();
rlMargin.setMargins(0, 0, 0, 0);
relativeLayout.setLayoutParams(rlMargin);
LinearLayout linearLayout = (LinearLayout) relativeLayout.getParent();
hideAllLinearLayoutExcept(linearLayout.getId());
hideAllTilesExcept(viewId);
}
的ViewID
是的LinearLayout
我点击的ID。这个功能是从所谓的onClick()
viewId
is the id of the LinearLayout
I am clicking. This function is called from onClick()
推荐答案
当然这是可能的。
简单地写自己的自定义动画和修改的动画视图的的LayoutParams
。
在这个例子中,动画的动画高度动画视图。当然,动画的宽度也有可能
Simply write your own custom-animation and modify the LayoutParams
of your animated view.
In this example, the animation animates the height of the animated View. Of course, animating the width is also possible.
这是它怎么可能是这样的:
This is how it could look like:
public class ResizeAnimation extends Animation {
private int startHeight;
private int deltaHeight; // distance between start and end height
private View view;
/**
* constructor, do not forget to use the setParams(int, int) method before
* starting the animation
* @param v
*/
public ResizeAnimation (View v) {
this.view = v;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
view.getLayoutParams().height = (int) (startHeight + deltaHeight * interpolatedTime);
view.requestLayout();
}
/**
* set the starting and ending height for the resize animation
* starting height is usually the views current height, the end height is the height
* we want to reach after the animation is completed
* @param start height in pixels
* @param end height in pixels
*/
public void setParams(int start, int end) {
this.startHeight = start;
deltaHeight = end - startHeight;
}
/**
* set the duration for the hideshowanimation
*/
@Override
public void setDuration(long durationMillis) {
super.setDuration(durationMillis);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
在code,创建一个新的动画,并将其应用到RelativeLayout的要动画:
RelativeLayout relativeLayout = (RelativeLayout) ((LinearLayout) view.findViewById(viewId)).getParent();
// getting the layoutparams might differ in your application, it depends on the parent layout
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) relativeLayout.getLayoutParams();
ResizeAnimation a = new ResizeAnimation(relativeLayout);
a.setDuration(500);
// set the starting height (the current height) and the new height that the view should have after the animation
a.setParams(lp.height, newHeight);
relativeLayout.startAnimation(a);
这篇关于如何动画布局的宽度和高度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!