java - 旋转图像视图
问题描述
我有滚动计数的轮盘赌(ImageView)。当我点击按钮时,轮盘赌开始以 270 度旋转。当我再次点击按钮时,轮盘赌必须加快速度并转得更多。如何实现第一个动画开始后滚动的加速和动画完全结束后的滚动计数减少?
解决方案
我无法准确理解您想要做什么,因为您没有提供任何显示错误的参考代码,但这应该可以满足您的要求,即在您不断单击“旋转”时让图像旋转得更快按钮。
我用过ObjectAnimator
活动主.xml:
<ImageView
android:id="@+id/imageView_roulette"
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@mipmap/ic_launcher"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start Rotation"
app:layout_constraintTop_toBottomOf="@+id/imageView_roulette"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/buttonStop"
app:layout_constraintRight_toRightOf="parent"
/>
<Button
android:id="@+id/buttonStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop"
app:layout_constraintTop_toBottomOf="@+id/imageView_roulette"
app:layout_constraintLeft_toRightOf="@+id/button"
app:layout_constraintRight_toRightOf="parent"
/>
</android.support.constraint.ConstraintLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity {
Boolean rotating = false;
Integer durationOfSpin = 3000; //default 3000
ImageView image;
ObjectAnimator animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonStart = (Button) findViewById(R.id.button);
Button buttonStop = (Button) findViewById(R.id.buttonStop);
image = (ImageView) findViewById(R.id.imageView_roulette);
buttonStart.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
if(!rotating) {
rotating = true;
animation = ObjectAnimator.ofFloat(
image, "rotation", 0, 360);
animation.setDuration(durationOfSpin);
animation.setInterpolator(new LinearInterpolator());
animation.setRepeatCount(Animation.INFINITE);
animation.start();
}else{
if(durationOfSpin - 300 > 0) {
durationOfSpin -= 300; //make slightly faster each subsequent click
}
animation.setDuration(durationOfSpin);
}
}
});
buttonStop.setOnClickListener(new Button.OnClickListener() {
//just here so you can cancel your rotation
public void onClick(View v) {
if(rotating) {
rotating = false;
durationOfSpin = 3000; //set back to default
animation.cancel();
}
}
});
}
}
推荐阅读
- scala - 使用 scala 宏时,为什么编译错误堆栈跟踪看起来如此不连贯?
- c++ - 定义一个 unordered_set 对
- embedded - 简单工作室中用于闪烁 LED 问题的 GPIO 命令
- php - 小部件显示空白页
- java - 创建唯一的随机 ID
- ruby - rspec 测试一个类方法给对象不被监视或存根错误
- mongodb - 连接到服务器 localhost:27017 时,在监视器线程中连接远程 MongoDB 异常时出错
- html - 如何打开基于 Django 构建的完整版网站?
- php - 为什么 php 会话密码显示在 var_dump 而不是用户名中?
- swift - SwiftUI 用 1 个缩放手势缩放 2 个图像