我想知道是否有一种简单的方法可以将视图(按钮)添加到RelativeLayout,并使用某种缩放动画。 我从Button扩展了一个类并做了类似的事情:
public class MyButton extends Button {
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ScaleAnimation anim = new ScaleAnimation(0,1,0,1);
anim.setDuration(1000);
anim.setFillAfter(true);
this.startAnimation(anim);
}
然后尝试将此按钮添加到视图中,但它不起作用。请帮忙!
答案 0 :(得分:15)
在您的活动中,请改为使用:
parentview.addView(myButton);
然后用以下方法设置按钮的动画:
Animation animation = AnimationUtils.loadAnimation(getBaseContext(), R.anim.slide_right_in);
animation.setStartOffset(0);
myButton.startAnimation(animation);
这是slide_right_in.xml
的示例<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="800"/>
</set>
此外, 这是我写的一个活动播放动画函数:
public Animation PlayAnim( int viewid, Context Con, int animationid, int StartOffset )
{
View v = findViewById(viewid);
if( v != null )
{
Animation animation = AnimationUtils.loadAnimation(Con, animationid );
animation.setStartOffset(StartOffset);
v.startAnimation(animation);
return animation;
}
return null;
}
您可以这样称呼:
PlayAnim(R.id.bottombar, (Context) this, R.anim.slide_right_in, 0);
其中:
第一个参数是您要应用动画的视图的ID。
第二个参数是在您的活动中检索到的上下文。
第3个参数是您放置在动画资源文件夹或android预定义动画中的所需动画。
第4个参数是动画起始时间。
答案 1 :(得分:7)
我测试了您的动画按钮实现,它可以正常工作。一定有其他一些问题。可能是按钮添加到布局的方式。
要将按钮添加到相对布局,请使用此代码。
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
MyButton b1 = new MyButton(Main.this);
b1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
rl.addView(b1);
或者你可以从布局中膨胀按钮。为此,请创建包含按钮实现的布局mybtn.xml
:
<?xml version="1.0" encoding="utf-8"?>
<PACKAGE_OF_MYBUTTON_HERE.MyButton
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
将其添加到布局调用中:
RelativeLayout rl = (RelativeLayout)findViewById(R.id.rl);
Button b = (Button)getLayoutInflater().inflate(R.layout.mybtn, rl, false);
rl.addView(b);
将视图添加到相对布局时,视图的正确定位可能存在问题。只需在调用rl.addView(b1)
之前添加这样的代码(代码段在someOtherView下面添加新按钮)。
LayoutParams lp = new LayoutParams(b.getLayoutParams());
lp.addRule(RelativeLayout.BELOW, someOtherView.getId());
b.setLayoutParams(lp);
答案 2 :(得分:0)
您可以尝试在添加视图之前将其添加到您的代码中。我猜这段代码适用于任何视图更改。在我的情况下,用动画切换2个视图。
TransitionManager.beginDelayedTransition(layoutlocation);//layoutlocation is parent layout(In my case relative layout) of the view which you gonna add.
希望它有效。我花了两天时间完成这项工作。
答案 3 :(得分:0)
并不总是需要使用动画类来获取实际动画。我们可以使用处理程序向布局添加视图时提供延迟,如图所示。
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
Animation fadeanimation = new AlphaAnimation(0,1);
fadeanimation.setDuration(position*60+100);
child.setAnimation(fadeanimation);
linearLayout.addView(child);
}
}, position*60);