我在触摸事件上“对信号3作出反应”

时间:2013-05-15 17:51:08

标签: android imageview logcat ontouchevent ontouchlistener

我需要制作一个ImageView,当从左向右滑动时会模拟3D旋转,所以我使用这个布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:padding="@dimen/global_default_padding"
    android:background="@color/main_background"
    android:id="@+id/rotateImage_background">

        <Button         android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:text="BACK"
                        android:id="@+id/rotateImage_button_back"/>

        <ImageView      android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:layout_gravity="center"

                        android:id="@+id/rotateImage_image_rotator"
                        android:src="@drawable/hardware_rotate"
                        />

</LinearLayout>

这是我的代码:

@Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_MOVE){

            if(event.getHistorySize() == 0){

            }
            else{
                if(mPreRotationCounter < 10){
                    mPreRotationCounter++;
                }
                else{
                    mPreRotationCounter = 0;
                    Log.e("Rotate", "Should rotate, lol");

                    if(event.getX() > event.getHistoricalX(event.getHistorySize() -1)){
                        updateRotation(true);
                    }
                    else{
                        updateRotation(false);
                    }
                }
            }
        }
        else if(event.getAction() == MotionEvent.ACTION_DOWN){

        }
        else if(event.getAction() == MotionEvent.ACTION_DOWN){

        }

        return true;
    }

private void updateRotation(boolean direction){
        if(direction){
            if(mCurrentImageLevel < 7){
                mCurrentImageLevel++;
            }
            else{
                mCurrentImageLevel = 0;
            }
        }
        else{
            if(mCurrentImageLevel > 0){
                mCurrentImageLevel--;
            }
            else{
                mCurrentImageLevel = 7;
            }
        }
        mRotator.setImageLevel(mCurrentImageLevel);

    }

但是当我尝试它时,我在logCat中获得了大量的“对信号3作出反应”,并且它不应该像它应该的那样敏感,但是当我调试时,它工作正常。 有趣的是,当我在Android 2.1上测试时没有问题,但是当我在4.0.3或更高版本上测试它时,我就会遇到这个问题。

1 个答案:

答案 0 :(得分:0)

event.getHistorySize()等于0时,您什么都不做。因为您使用-1索引,当event.getHistorySize()为0时可能会出错。试试这个:

if(event.getHistorySize() == 0) {
    return true;            
}