【发布时间】:2020-04-30 16:05:49
【问题描述】:
我发现此代码可以为红色条(条形码扫描仪)设置动画。然而,它是为具有固定尺寸的相对布局而设计的。 我需要找到一个浮点值(相对于容器)而不是一个固定值。
这里是布局:
<RelativeLayout
android:id="@+id/trackBox"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_centerInParent="true"
android:background="@drawable/background_border"
app:layout_constraintBottom_toTopOf="@+id/guidelineBarcodeScanner04"
app:layout_constraintEnd_toStartOf="@+id/guidelineBarcodeScanner01"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/guidelineBarcodeScanner02"
app:layout_constraintTop_toTopOf="@+id/guidelineBarcodeScanner03"
app:layout_constraintVertical_bias="0.0">
<RelativeLayout
android:id="@+id/midLine"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#FF0000" />
</RelativeLayout>
其中midLine为红色条,trackBox为白色边框,条需要上下滑动。
这里是实际代码:
public void slideToAbove() {
Animation slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, -300);
slide.setDuration(2000);
midLine.startAnimation(slide);
slide.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
midLine.clearAnimation();
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
midLine.getWidth(), midLine.getHeight());
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
midLine.setLayoutParams(lp);
slideToDown();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
public void slideToDown() {
Animation slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, 300);
slide.setDuration(2000);
midLine.startAnimation(slide);
slide.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
midLine.clearAnimation();
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
midLine.getWidth(), midLine.getHeight());
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
midLine.setLayoutParams(lp);
slideToAbove();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
要查找的值实际上是固定的 300。 框是受限制的(以屏幕的百分比表示),因此固定值根本不好。
我刚刚尝试了 trackBox.getHeight(),但不是这样。
刚试过:
int i;
i = trackBox.getBottom() - trackBox.getTop();
不工作...
【问题讨论】:
标签: java android animation layout