Android 圖片全屏滑動效果

m8x2 9年前發布 | 2K 次閱讀 Java Android

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.animation.AnimationUtils;
import android.widget.Gallery.LayoutParams;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewSwitcher;

public class MyGalleryActivity extends Activity implements
ViewSwitcher.ViewFactory {
private ImageSwitcher mSwitcher;

private int mPosition = 0;  
private GestureDetector mGestureDetector;  

private Handler _handle;  
private Runnable _runable;  

private static final float HORIZONTAL_SCROLL_DISTANCE = 10f;  

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    requestWindowFeature(Window.FEATURE_NO_TITLE);  
    setContentView(R.layout.main);  

    mSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitch);  
    mSwitcher.setFactory(this);  

    setupOnTouchListeners(findViewById(R.id.rootview));  
    mSwitcher.setImageResource(mImageIds[mPosition]);  

    _handle = new Handler();  
    _runable = new Runnable() {  
        @Override  
        public void run() {  

            if (mPosition == (mImageIds.length - 1)) {  
                Toast.makeText(MyGalleryActivity.this, "最后一張", 0).show();  
            } else {  
                mSwitcher.setInAnimation(AnimationUtils.loadAnimation(  
                        MyGalleryActivity.this, R.anim.slide_in_right));  
                mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(  
                        MyGalleryActivity.this, R.anim.slide_out_left));  
                mSwitcher.setImageResource(mImageIds[++mPosition]);  

                _handle.postDelayed(_runable, 3000);  
            }  
        }  
    };  
}  

private void setupOnTouchListeners(View rootView) {  
    mGestureDetector = new GestureDetector(this, new MyGestureListener());  

    OnTouchListener rootListener = new OnTouchListener() {  
        public boolean onTouch(View v, MotionEvent event) {  
            mGestureDetector.onTouchEvent(event);  

            // We do not use the return value of  
            // mGestureDetector.onTouchEvent because we will not receive  
            // the "up" event if we return false for the "down" event.  
            return true;  
        }  
    };  

    rootView.setOnTouchListener(rootListener);  
}  

public void onPause() {  
    super.onPause();  
    _handle.removeCallbacks(_runable);  
}  

private class MyGestureListener extends  
        GestureDetector.SimpleOnGestureListener {  

    @Override  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,  
            float velocityY) {  
        if (Math.abs(velocityY) <= Math.abs(velocityX)  
                && Math.abs(velocityX) > HORIZONTAL_SCROLL_DISTANCE) {  
            //  
            System.out.println(velocityX);  
            if (velocityX > 0) {  
                if (mPosition > 0) {  
                    _handle.removeCallbacks(_runable);  
                    //  
                    mSwitcher.setInAnimation(AnimationUtils.loadAnimation(  
                            MyGalleryActivity.this, R.anim.slide_in_left));  
                    mSwitcher  
                            .setOutAnimation(AnimationUtils.loadAnimation(  
                                    MyGalleryActivity.this,  
                                    R.anim.slide_out_right));  
                    mSwitcher.setImageResource(mImageIds[--mPosition]);  

                }  
            } else {  
                if (mPosition < (mImageIds.length - 1)) {  
                    _handle.removeCallbacks(_runable);  

                    mSwitcher.setInAnimation(AnimationUtils.loadAnimation(  
                            MyGalleryActivity.this, R.anim.slide_in_right));  
                    mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(  
                            MyGalleryActivity.this, R.anim.slide_out_left));  
                    mSwitcher.setImageResource(mImageIds[++mPosition]);  

                } else if (mPosition == (mImageIds.length - 1)) {  
                    _handle.removeCallbacks(_runable);  
                    Toast.makeText(MyGalleryActivity.this, "注冊", 0).show();  
                    return true;  
                }  
            }  
        }  

        return true;  
    }  

}  

private Integer[] mImageIds = { R.drawable.a, R.drawable.b, R.drawable.c,  
        R.drawable.d, R.drawable.e, R.drawable.f };  

@Override  
public View makeView() {  
    ImageView i = new ImageView(this);  
    i.setBackgroundColor(0xFF000000);  
    i.setScaleType(ImageView.ScaleType.FIT_XY);  
    i.setLayoutParams(new ImageSwitcher.LayoutParams(  
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
    return i;  
}  

} </pre>

 本文由用戶 m8x2 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!