アクティビティのレイアウトのサイズを変更したい。
メインXMLのコードは次のとおりです。
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1"
Android:orientation="vertical" >
<LinearLayout
Android:id="@+id/top"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
Android:background="#3ee3e3" >
</LinearLayout>
<LinearLayout
Android:id="@+id/middle"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_weight="1">
</LinearLayout>
<LinearLayout
Android:id="@+id/bottom"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
Android:background="#fe51e6" >
</LinearLayout>
</LinearLayout>
ご覧のとおり、上部と下部のレイアウトの高さは0で、中央のレイアウトはすべての場所をカバーしています。
すべてのレイアウトの高さが同じになるまで、中央のレイアウトサイズをプログラムで小さくし、上部と下部の両方のレイアウトサイズを大きくしたいと思います。
アニメーションのように見せたいです。
どうすればいいですか?
ありがとう
同様の目的でResizeAnimationを作成しました。簡単ですが、費用がかかります。
/**
* an animation for resizing the view.
*/
public class ResizeAnimation extends Animation {
private View mView;
private float mToHeight;
private float mFromHeight;
private float mToWidth;
private float mFromWidth;
public ResizeAnimation(View v, float fromWidth, float fromHeight, float toWidth, float toHeight) {
mToHeight = toHeight;
mToWidth = toWidth;
mFromHeight = fromHeight;
mFromWidth = fromWidth;
mView = v;
setDuration(300);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
float height =
(mToHeight - mFromHeight) * interpolatedTime + mFromHeight;
float width = (mToWidth - mFromWidth) * interpolatedTime + mFromWidth;
LayoutParams p = mView.getLayoutParams();
p.height = (int) height;
p.width = (int) width;
mView.requestLayout();
}
}
Honeycomb(Android 3.0)には、スムーズなアニメーションのためのAnimator
およびObjectAnimator
クラスがあります。
読んでください こちら
バウンス補間を使用してビューグループ(LinearLayout)の動きをアニメーション化する方法の例。
BounceInterpolator bounceInterpolator = new BounceInterpolator();
ObjectAnimator anim = ObjectAnimator.ofFloat(myViewGroup, "translationY", 0f, -200 );
anim.setInterpolator(bounceInterpolator);
anim.setDuration(1100).start();
これにより、バウンス効果のある滑らかなアニメーションがトリガーされ、ハニカムの前のアニメーションとは異なるビューが実際に移動します。ドキュメントから:
以前のアニメーションは、ターゲットオブジェクトの外観を変更しました...しかし、実際にはオブジェクト自体は変更しませんでした。
また、Googleの新しいSpringアニメーションでサイズを変更できます。
SpringAnimationの作成方法:
fun getSpringAnimation(view: View, springAnimationType: FloatPropertyCompat<View>, finalPosition: Float): SpringAnimation {
val animation = SpringAnimation(view, springAnimationType )
// create a spring with desired parameters
val spring = SpringForce()
spring.finalPosition = finalPosition
spring.stiffness = SpringForce.STIFFNESS_VERY_LOW // optional
spring.dampingRatio = SpringForce.DAMPING_RATIO_NO_BOUNCY // optional
// set your animation's spring
animation.spring = spring
return animation
}
使用法(元のビューサイズの80%にサイズ変更します。)
getSpringAnimation(view, SpringAnimation.SCALE_X, 0.8f).start()
getSpringAnimation(view, SpringAnimation.SCALE_Y, 0.8f).start()