如何使用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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...