如何解决如何使用OnTouch Move事件在Android Studio中的中心点旋转ImageView?
感谢我为多年以来一直致力于个人项目的开发而购买的代码,我正在学习旋转动画以及度数/角度在基于Roulette Wheel Android Studio的应用程序中如何工作。
You can see the design of the app here so I can explain why I need help!
车轮的旋转动画基于下一个代码(我希望我可以对其进行改进),并通过按中心图像按钮来执行:
public class MainActivity extends AppCompatActivity{
private static final String[] sectors = {"5","4","3","2","1","6"};
private static final String TAG = "";
Dialog textDialog;
TextView textView;
@BindView(R.id.circle)
ImageView wheel;
@BindView(R.id.Btn)
ImageView playBtn;
// We create a Random instance to make our wheel spin randomly
private static final Random RANDOM = new Random();
private int degree = 0,degreeOld = 0;
// We have 37 sectors on the wheel,we divide 360 by this value to have angle for each sector
// we divide by 2 to have a half sector
private static final float HALF_SECTOR = 360f / 6f / 2f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
textDialog = new Dialog(this);
textDialog.setContentView(R.layout.textview);
textView = (TextView) textDialog.findViewById(R.id.textview1);
}
//Note: The Value of the setDuration and the sum with the RANDOM.nextInt must be different.
@OnClick(R.id.Btn)
public void spin(View v){
playBtn.setClickable(false);
degreeOld = degree % 360;
// we calculate random angle for rotation of our wheel
degree = RANDOM.nextInt(1500) + 3600;
// rotation effect on the center of the wheel
RotateAnimation rotateAnim = new RotateAnimation(degreeOld,degree,RotateAnimation.RELATIVE_TO_SELF,0.5f,0.5f);
rotateAnim.setDuration(5000);
rotateAnim.setFillAfter(true);
rotateAnim.setInterpolator(new DecelerateInterpolator());
rotateAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// we empty the result text view when the animation start
textView.setText("");
}
@Override
public void onAnimationEnd(Animation animation) {
// we display the correct sector pointed by the triangle at the end of the rotate animation
textView.setText(getSector(360 - (degree % 360)));
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
// we start the animation
wheel.startAnimation(rotateAnim);
}
private String getSector(int degrees) {
int i = 0;
textDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
textDialog.show();
String text = null;
do {
// start and end of each sector on the wheel
float start = HALF_SECTOR * (i * 2 + 1);
float end = HALF_SECTOR * (i * 2 + 3);
Log.d(TAG,"Obtained Degree: " + degrees);
Log.d(TAG,"Start Degree: " + start);
Log.d(TAG,"End Degree: " + end);
if (degrees >= start && degrees < end) {
// degrees is in [start;end[
// so text is equals to sectors[i];
text = sectors[i];
}
i++;
Log.d(TAG,"Tries: " + i);
} while (text == null && i < sectors.length);
//If the obtained degree is not between the Start or End Degrees,and the number of tries has reached the length of the array,the last value is established.
if(i == sectors.length){
text = sectors[i-1];
}
playBtn.setClickable(true);
Log.d(TAG,"Obtained Value: " + text);
return text;
}
}
这里的事情是我想使滚轮更加逼真,并让用户能够使用OnTouch(ACTION_MOVE)用手指旋转滚轮,如果操作缓慢,他们将旋转滚轮,但是如果他们以一定速度移动手指,他们可以基于该速度执行旋转动画,类似于此应用程序的物理过程:Decision Roulette
希望可以得到一种解决方案,以便通过触摸实现简单的旋转,因为我已经在Internet上进行了搜索,并且所有动画都为按钮而没有触摸。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。