我想使用ScaleAnimation(以编程方式不在xml中)更改高度以查看父高度的0到60%。视图宽度恒定,为50px。视图为空,仅设置背景颜色。
有人可以使用代码中的ScaleAnimation为scaleAnim
提供代码。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layContainer
>
<View
android:layout_width="50px"
android:layout_height="fill_parent"
android:id="@+id/viewContainer"
android:background:"#00f00"
/>
</LinearLayout>
ScaleAnimation scaleAnim = new ScaleAnimation(...);
动画前后的视图 .Thanks
答案 0 :(得分:104)
这是一个完全相同的代码片段。
public void scaleView(View v, float startScale, float endScale) {
Animation anim = new ScaleAnimation(
1f, 1f, // Start and end values for the X axis scaling
startScale, endScale, // Start and end values for the Y axis scaling
Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
Animation.RELATIVE_TO_SELF, 1f); // Pivot point of Y scaling
anim.setFillAfter(true); // Needed to keep the result of the animation
anim.setDuration(1000);
v.startAnimation(anim);
}
这里使用的ScaleAnimation构造函数需要8个args,4个与处理X-scale有关,我们不关心(1f, 1f, ... Animation.RELATIVE_TO_SELF, 0f, ...)
。
其他4个参数用于我们关心的Y缩放。
startScale, endScale
- 在您的情况下,您使用0f, 0.6f
。
Animation.RELATIVE_TO_SELF, 1f
- 指定视图缩小的位置(在文档中称为数据透视)。在这里,我们将浮点值设置为1f
,因为我们希望动画从底部开始增长条形。如果我们希望它从顶部向下增长,我们会使用0f
。
最后,同样重要的是致电anim.setFillAfter(true)
。如果您希望动画结果在动画完成后保持不变,则必须在动画制作工具上运行此动画。
所以在你的情况下,你可以这样做:
View v = findViewById(R.id.viewContainer);
scaleView(v, 0f, .6f);
答案 1 :(得分:46)
尝试使用此代码创建不使用xml
的缩放动画ScaleAnimation animation = new ScaleAnimation(fromXscale, toXscale, fromYscale, toYscale, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
答案 2 :(得分:44)
在XML中,这是我用来实现相同结果的东西。可能这更直观了。
<强> scale_up.xml
强>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="200"
android:fromXScale="1.0"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="100%"
android:toXScale="1.0"
android:toYScale="1.0" />
</set>
<强> scale_down.xml
强>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
android:duration="200"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="100%"
android:toXScale="1.0"
android:toYScale="0.0" />
</set>
查看X轴上的动画来自1.0 -> 1.0
,这意味着您没有在该方向上任何放大并保持全宽,而在Y轴上您获得0.0 -> 1.0
缩放,如问题中的图形所示。希望这有助于某人。
有些人可能想知道我们看到请求的java代码。
将动画文件放在anim
文件夹中,然后加载和设置类似的动画文件。
Animation scaleDown = AnimationUtils.loadAnimation(youContext, R.anim.scale_down);
ImagView v = findViewById(R.id.your_image_view);
v.startAnimation(scaleDown);
答案 3 :(得分:3)
使用此方法
如果您要缩放到四分之一(一半x,一半y)
view.animate().scaleX(0.5f).scaleY(0.5f)
如果要缩放并移到右下角
view.animate().scaleX(0.5f).scaleY(0.5f)
.translationY((view.height/4).toFloat()).translationX((view.width/4).toFloat())
如果您想移至顶部,请使用(-view.height/4)
,并向左(-view.width / 4)
如果要在动画结束后做某事,请使用withEndAction(Runnable runnable)
功能。
您可以使用其他一些属性,例如 alpha 和 rotation
完整代码
view.animate()
.scaleX(0.5f).scaleY(0.5f)//scale to quarter(half x,half y)
.translationY((view.height/4).toFloat()).translationX((view.width/4).toFloat())// move to bottom / right
.alpha(0.5f) // make it less visible
.rotation(360f) // one round turns
.setDuration(1000) // all take 1 seconds
.withEndAction(new Runnable() {
@Override
public void run() {
//animation ended
}
});
答案 4 :(得分:1)
使用 helper方法和 start-repeat-end处理程序来调整大小,如下所示:
Object.values(booklist).forEach(element => {
const y = element;
this.books.push(y as Book);
});
Helper方法:
resize(
view1,
1.0f,
0.0f,
1.0f,
0.0f,
0.0f,
0.0f,
150,
null,
null,
null);
return null;
}
答案 5 :(得分:1)
public void expand(final View v) {
ScaleAnimation scaleAnimation = new ScaleAnimation(1, 1, 1, 0, 0, 0);
scaleAnimation.setDuration(250);
scaleAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
v.setVisibility(View.INVISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
v.startAnimation(scaleAnimation);
}
public void collapse(final View v) {
ScaleAnimation scaleAnimation = new ScaleAnimation(1, 1, 0, 1, 0, 0);
scaleAnimation.setDuration(250);
scaleAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
v.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
v.startAnimation(scaleAnimation);
}
答案 6 :(得分:0)
将此代码添加到值动画
上<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:duration="@android:integer/config_longAnimTime"
android:fromXScale="0.2"
android:fromYScale="0.2"
android:toXScale="1.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"/>
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="@android:integer/config_longAnimTime"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
</set>
调用styles.xml
<style name="DialogScale">
<item name="android:windowEnterAnimation">@anim/scale_in</item>
<item name="android:windowExitAnimation">@anim/scale_out</item>
</style>
在Java代码中: 设置Onclick
public void onClick(View v) {
fab_onclick(R.style.DialogScale, "Scale" ,(Activity) context,getWindow().getDecorView().getRootView());
// Dialogs.fab_onclick(R.style.DialogScale, "Scale");
}
设置方法:
alertDialog.getWindow().getAttributes().windowAnimations = type;