Android 圖片全屏滑動效果

openkk 12年前發布 | 45K 次閱讀 Android Android開發 移動開發

修改一下代碼,還可以有幻燈片效果。

package com.h3c.my;

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;
    }
}

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