安卓 java 窗帘带进度的开关动画,并且点击开之后,开动画没结束再点击关
时间: 2024-05-08 17:16:23 浏览: 97
以下是一个简单的安卓 Java 窗帘带进度的开关动画示例,可以实现点击开关时的动画效果。在动画进行中,点击开关无效,等待动画结束后才能再次点击开关。
首先,在布局文件中定义窗帘布局和开关按钮:
```
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/curtain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/curtain" />
<Button
android:id="@+id/switch_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开关"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
```
接下来,在 Java 代码中实现动画效果:
```
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ImageView mCurtain;
private Button mSwitchButton;
private boolean mIsOpened = false;
private boolean mIsAnimating = false;
private ObjectAnimator mAnimator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCurtain = (ImageView) findViewById(R.id.curtain);
mSwitchButton = (Button) findViewById(R.id.switch_button);
mSwitchButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (!mIsAnimating) {
mIsAnimating = true;
if (mIsOpened) {
mAnimator = ObjectAnimator.ofFloat(mCurtain, "translationY", 0, mCurtain.getHeight());
} else {
mAnimator = ObjectAnimator.ofFloat(mCurtain, "translationY", mCurtain.getHeight(), 0);
}
mAnimator.setDuration(1000);
mAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mIsOpened = !mIsOpened;
mIsAnimating = false;
}
});
mAnimator.start();
}
}
}
```
在代码中,我们监听了开关按钮的点击事件,判断动画是否正在进行中,如果没有在进行中,则根据窗帘的开关状态设置动画的起始和结束位置,并启动动画。动画完成后,我们将窗帘状态置反,并将动画状态重置为未进行中。
需要注意的是,在动画进行中,我们将开关按钮的点击事件设为无效,以避免用户多次点击导致动画异常。