我需要制作一个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或更高版本上测试它时,我就会遇到这个问题。
答案 0 :(得分:0)
当event.getHistorySize()
等于0时,您什么都不做。因为您使用-1索引,当event.getHistorySize()
为0时可能会出错。试试这个:
if(event.getHistorySize() == 0) {
return true;
}