将onScroll与viewFlipper一起使用

时间:2011-11-25 09:10:29

标签: android

我想使用与iPhone图库效果相同的效果。即当我滚动图像时,下一个图像开始出现并相对于前一个图像向内移动。

我想在视图鳍状肢中使用它,直到现在我可以移动第一张图像,但我看不到下一张图像。

public class IphoneAnimationActivity extends Activity implements
    OnGestureListener {

private static final int SWIPE_THRESHOLD_VELOCITY = 1000;
GestureDetector gestureScanner;
ViewFlipper flipper;
View v;
ImageView imageView1;
ImageView imageView2;

LayoutInflater inflate;

Animation slideOutRight;
Animation slideInLeft;
Animation slideOutLeft;
Animation slideInRight;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    flipper = (ViewFlipper) findViewById(R.id.viewFlipper1);

    inflate = getLayoutInflater();

    v = inflate.inflate(R.layout.image_view, null);

    View x = v;
    flipper.addView(x);

    slideOutRight = AnimationUtils.loadAnimation(this,
            R.anim.slide_right_out_photocards);
    slideInRight = AnimationUtils.loadAnimation(this,
            R.anim.slide_right_in_photocards);

    slideOutLeft = AnimationUtils.loadAnimation(this,
            R.anim.slide_left_out_photocards);
    slideInLeft = AnimationUtils.loadAnimation(this,
            R.anim.slide_left_in_photocards);

    gestureScanner = new GestureDetector(this);

    flipper.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            return gestureScanner.onTouchEvent(event);
        }
    });

}

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {

    // right to left swipe
    if (e1.getX() - e2.getX() > 0
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
        swipeLeft();
    }
    // left to right swipe
    else if (e2.getX() - e1.getX() > 0
            && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
        swipeRight();
    }
    return false;
}

private void swipeRight() {

    flipper.setInAnimation(slideInRight);
    flipper.setOutAnimation(slideOutRight);

    View y = inflate.inflate(R.layout.image_view, null);
    flipper.addView(y);
    flipper.setDisplayedChild(1);
    flipper.removeViewAt(0);
    // flipper.showNext();

}

private void swipeLeft() {

    flipper.setInAnimation(slideInLeft);
    flipper.setOutAnimation(slideOutLeft);

    View y = inflate.inflate(R.layout.image_view, null);
    flipper.addView(y);
    flipper.setDisplayedChild(1);
    flipper.removeViewAt(0);
}

@Override
public boolean onDown(MotionEvent e) {
    return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
        float distanceY) {

    if((e1.getX() - e2.getX()) > 0)
    {
        flipper.scrollBy(10, 0);            
        return true;
    }
    else if ((e1.getX() - e2.getX()) < 0) {
        flipper.scrollBy(-10, 0);           
        return true;
    }
    else            
    {

    }
    return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onSingleTapUp(MotionEvent e) {

    return false;
}

public boolean onTouchEvent(MotionEvent event) {
    return gestureScanner.onTouchEvent(event);
}

}

2 个答案:

答案 0 :(得分:0)

也许你应该使用Gallery小部件,或者从android兼容包中使用ViewPager?它们具有您想要的功能。

答案 1 :(得分:0)

从android支持lib v13开始,ViewPager + PageTransformer可用,可能会有所帮助: http://developer.android.com/training/animation/screen-slide.html#pagetransformer