旋转后,OnTouch事件侦听器无法正常工作

时间:2016-02-10 08:19:54

标签: android android-layout rotation ontouchlistener

我想通过旋转按钮旋转相对布局。

这是我的代码

main.java                 imageContainer =(RelativeLayout)findViewById(R.id.imageContainer);

            rotateBTN = (Button)findViewById(R.id.rotate);

            rotateBTN.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
            final float xc = imageContainer.getWidth() / 2;
            final float yc = imageContainer.getHeight() / 2;

            float x = event.getX();
            float y = event.getY();

            switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN: {

            imageContainer.clearAnimation();

            mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y));

            break;
            }
            case MotionEvent.ACTION_MOVE: {

            mPrevAngle = mCurrAngle;
            mCurrAngle = Math.toDegrees(Math.atan2(x - xc, yc - y));

            animate(mPrevAngle, mCurrAngle, 0);

            break;
            }

            case MotionEvent.ACTION_UP : {
            rotate = false;

            mPrevAngle = mCurrAngle = 0;

            break;
            }
            }

            return true;
            }
            });

private void animate(double fromDegrees, double toDegrees, long durationMillis) {
                    final RotateAnimation rotate = new RotateAnimation((float) fromDegrees, (float) toDegrees,
                            RotateAnimation.RELATIVE_TO_SELF, 0.5f,
                            RotateAnimation.RELATIVE_TO_SELF, 0.5f);

                    rotate.setDuration(durationMillis);
                    rotate.setFillEnabled(true);
                    rotate.setFillAfter(true);
                   imageContainer.startAnimation(rotate);
                //     imageView2.startAnimation(rotate);
                    System.out.println(mCurrAngle);
                }

main.xml中

<RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:id="@+id/onlyImage"
            android:layout_marginTop="20dp">


            <ImageView
            android:id="@+id/imageView1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher"
            />

            <ImageView
            android:id="@+id/imageView2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/ic_launcher"
            android:visibility="gone"
            />


            </RelativeLayout>

            <Button
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:id="@+id/rotate"
            />


            </RelativeLayout>

通过此代码,我可以旋转RelativeLayout。但问题是旋转后第一次旋转(旋转按钮也旋转,因为它在我的RelativeLayout内)ontouch事件不会在我的旋转按钮的新位置调用但是如果我触摸我的相对布局的左上角(我的初始位置)按钮)onTouch监听器工作正常。

请帮助我找到问题。任何建议将不胜感激:) this is my relative layout

P.S我想做this

之类的事情

0 个答案:

没有答案