これを行う方法の良い例が見つかりませんでした。アニメーションでレイアウトの高さを拡張する方法は?
xの高さでRelativeLayoutが設定されています。
x + yの高さに高さを拡大するボタンを追加したいと思います。
誰かがプログラムでそれを行う方法の良い例を紹介してくれますか?
これを行う方法の良い例が見つかりませんでした。アニメーションでレイアウトの高さを拡張する方法は?
xの高さでRelativeLayoutが設定されています。
x + yの高さに高さを拡大するボタンを追加したいと思います。
誰かがプログラムでそれを行う方法の良い例を紹介してくれますか?
ある公式ドキュメント
である必要があります。しかしここでは正確な新しい高さを知る必要があります。
public class LayoutAnimationActivity extends Activity
{
RelativeLayout ril1;
Button btn;
int initialHeight;
int actualHeight;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
ril1=(RelativeLayout)findViewById(R.id.relativeLayout1);
btn=new Button(this);
btn.setWidth(100);
btn.setHeight(200);
btn.setText("Button");
actualHeight=210;
Ani a=new Ani();
a.setDuration(2000);
ril1.startAnimation(a);
}
class Ani extends Animation
{
public Ani() {
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newHeight;
newHeight = (int)(initialHeight * interpolatedTime);
ril1.removeAllViews();
btn.setWidth(100);
btn.setHeight(300);
btn.setText("as");
ril1.addView(btn);
ril1.getLayoutParams().height = newHeight;
ril1.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
initialHeight = actualHeight;
}
@Override
public boolean willChangeBounds() {
return true;
}
};
}
あなたは、スケールアニメーションhereは、以下のように新しい編集した答えの下に確認してください、これはコードで
private void animate() {
ImageView imageView = (ImageView) findViewById(R.id.ImageView01);
ScaleAnimation scale = new ScaleAnimation((float)1.0, (float)1.5, (float)1.0, (float)1.5);
scale.setFillAfter(true);
scale.setDuration(500);
imageView.startAnimation(scale);
}
最も近い解決策をマークしました。これは正確な解決策です。私も同じ問題がありました。うまくいけば、この答えは他の人に役立つでしょう。
1)あなたのXMLレイアウトファイルでandroid:animateLayoutChanges="true"
を設定します。
インスタンス化ResizeAnimation
ResizeAnimation resizeAnimation = new ResizeAnimation(
view,
targetHeight,
startHeight
);
resizeAnimation.setDuration(duration);
view.startAnimation(resizeAnimation);
ResizeAnimation
クラスはAnimation
クラスせずにこれを行うには、この
public class ResizeAnimation extends Animation {
final int targetHeight;
View view;
int startHeight;
public ResizeAnimation(View view, int targetHeight, int startHeight) {
this.view = view;
this.targetHeight = targetHeight;
this.startHeight = startHeight;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newHeight = (int) (startHeight + targetHeight * interpolatedTime);
//to support decent animation, change new heigt as Nico S. recommended in comments
//int newHeight = (int) (startHeight+(targetHeight - startHeight) * interpolatedTime);
view.getLayoutParams().height = newHeight;
view.requestLayout();
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
つの簡単な方法のようになります。
2)ViewPropertyアニメーター
layout.setPivot(0);
layout.animate().scaleY(scaleFactor).setDuration(500);
を使用してピボットから拡張するビューを指示し、デフォルトでは、私の経験で何をしたいなることはほとんどありませんされ、真ん中にあります。期間はオプションです(デフォルト= 1000)。
final Button button1 = (Button) view.findViewById(R.id.button);
final CollapseAnimator animator = new CollapseAnimator(topLayout);
final ViewTreeObserver.OnGlobalLayoutListener listener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int mHeight = button1.getMeasuredHeight();
KLog.i("onGlobalLayout() mHeight:" + mHeight);
animator.setValues(mHeight*2, mHeight);
}
};
button1.getViewTreeObserver().addOnGlobalLayoutListener(listener);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
view.post(new Runnable() {
@Override
public void run() {
button1.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
animator.collapse();
}
});
}
});
とクラス
public class CollapseAnimator {
private View view;
private boolean collapse=true;
private int duation=300;
private int destHeight=300;
private ValueAnimator animator;
private int originHeight=0;
private int from=0;
private int to=0;
public CollapseAnimator(View view) {
this.view = view;
}
public void setValues(int destHeight,int originHeight){
this.destHeight = destHeight;
this.originHeight=originHeight;
from=originHeight;
to=originHeight;
}
public void collapse(){
from=to;
if(collapse){
to=destHeight;
collapse=false;
}else{
to=originHeight;
collapse=true;
}
KLog.i("from:" + from+",to:"+to);
animator = ValueAnimator.ofInt(from, to);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int val = (Integer) valueAnimator.getAnimatedValue();
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.height = val;
view.setLayoutParams(layoutParams);
}
});
animator.setDuration(duation);
animator.start();
}
}
私は展開したり折りたたんだり解決のため、ここでチェック: http://stackoverflow.com/questions/20973089/android-add-view-with-expand-アニメーションのない点滅 –
http://stackoverflow.com/a/8162779/5996106ベストソリューション –