2011.08.18——— android 图片效果 ImageSwitcher+GestureDetector

参考:http://www.williamhua.com/2009/04/android-touchscreen-gesture-recogniton/

实现一个滚动的图片效果,并且可以用手势来控制图片的滚动
package com.lp;import android.app.Activity;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.Animation.AnimationListener;import android.widget.Button;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.Toast;import android.widget.ViewSwitcher;import android.widget.Gallery.LayoutParams;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.View.OnTouchListener;import android.view.MotionEvent;import android.view.GestureDetector;public class MainActivity extends Activityimplements ViewSwitcher.ViewFactory {private Animation mInAnimationPrior;    private Animation mInAnimationNext;    private ImageSwitcher mSwitcher;    private ImageSwitcher mArrow;    private Button        mbutton;        private int mPosition = 0;    private GestureDetector mGestureDetector;            private Handler   _handle;    private Runnable  _runable;        private static final float HORIZONTAL_SCROLL_DISTANCE = 10f;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.startpage);                mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);        if(mSwitcher==null)        {        return;        }        mSwitcher.setFactory(this);                mArrow = (ImageSwitcher) findViewById(R.id.switcharrow);        mArrow.setFactory(this);        //mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,        //        android.R.anim.fade_in));        //mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,        //        android.R.anim.fade_out));                mbutton = (Button) findViewById(R.id.swtichbutton);        mbutton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (mPosition < (mImageIds.length -1)) {  //当点击按钮时 就取消自动切换图片_handle.removeCallbacks(_runable);mSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_in_right));        mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_out_left));    mSwitcher.setImageResource(mImageIds[++mPosition]);mArrow.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_in_right));mArrow.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_out_left));    mArrow.setImageResource(mArrowIds[mPosition]);}else if (mPosition == (mImageIds.length -1)) {_handle.removeCallbacks(_runable);//Intent intent = new Intent();//intent.setClass(MainActivity.this, RegisterActivity.class);//            startActivity(intent);//            MainActivity.this.finish();Toast.makeText(MainActivity.this, "注册", 0).show();}}});                setupOnTouchListeners(findViewById(R.id.rootview));        mSwitcher.setImageResource(mImageIds[mPosition]);        mArrow.setImageResource(mArrowIds[mPosition]);                _handle = new Handler();        _runable = new Runnable() {@Overridepublic void run() {if (mPosition == (mImageIds.length -1)) {//Intent intent = new Intent();//intent.setClass(MainActivity.this, RegisterActivity.class);//            startActivity(intent);//            MainActivity.this.finish();Toast.makeText(MainActivity.this, "注册", 0).show();}else{mSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_in_right));        mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_out_left));    mSwitcher.setImageResource(mImageIds[++mPosition]);mArrow.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_in_right));mArrow.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                R.anim.slide_out_left));    mArrow.setImageResource(mArrowIds[mPosition]);_handle.postDelayed(_runable, 3000);}}};     }        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;    }        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);    }        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(MainActivity.this,                    R.anim.slide_in_left));            mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_out_right));    mSwitcher.setImageResource(mImageIds[--mPosition]);        mArrow.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_in_left));    mArrow.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_out_right));    mArrow.setImageResource(mArrowIds[mPosition]);    }    } else {    if (mPosition < (mImageIds.length -1)) {        _handle.removeCallbacks(_runable);        mSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_in_right));            mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_out_left));        mSwitcher.setImageResource(mImageIds[++mPosition]);        mArrow.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_in_right));    mArrow.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,                    R.anim.slide_out_left));        mArrow.setImageResource(mArrowIds[mPosition]);    }    else if (mPosition == (mImageIds.length -1)) {    _handle.removeCallbacks(_runable);//    Intent intent = new Intent();//    intent.setClass(MainActivity.this, RegisterActivity.class);//                startActivity(intent);//                MainActivity.this.finish();    Toast.makeText(MainActivity.this, "注册", 0).show();                return true;    }    }        }        return true;    }    }        private Integer[] mImageIds = {            R.drawable.sample_0, R.drawable.sample_1, R.drawable.sample_2};        private Integer[] mArrowIds = {            R.drawable.switch_arrow, R.drawable.switch_arrow_1, R.drawable.switch_arrow_2};        public void onResume()    {        super.onResume();                  //_handle.postDelayed(_runable, 3000);    }        public void onPause()    {        super.onPause();        _handle.removeCallbacks(_runable);    }            //@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {    _handle.removeCallbacks(_runable);//dialogAlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage("是否退出注册过程?");builder.setPositiveButton("是的", new DialogInterface.OnClickListener(){     public void onClick(DialogInterface dialog, int id) {               }});builder.setNegativeButton("不是", new DialogInterface.OnClickListener(){     public void onClick(DialogInterface dialog, int id) {     _handle.postDelayed(_runable, 3000);     }});builder.show();         return true;} else {return super.onKeyDown(keyCode, event);}}    }



side_in_left.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromXDelta="-50%p" android:toXDelta="0"            android:duration="@android:integer/config_longAnimTime"/><alpha android:fromAlpha="0.0" android:toAlpha="1.0"            android:duration="@android:integer/config_longAnimTime" /></set>

side_in_right.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromXDelta="50%p" android:toXDelta="0"            android:duration="@android:integer/config_longAnimTime"/><alpha android:fromAlpha="0.0" android:toAlpha="1.0"            android:duration="@android:integer/config_longAnimTime" /></set>


其他的类似。。


更多相关文章

  1. Android判断网线连接
  2. Android(安卓)用AsyncTask下载网络图片并显示百分比
  3. Android中Scroller类的分析
  4. Android(安卓)实现截屏
  5. Android(安卓)TextView文字过多时通过滚动条显示多余内容
  6. [Android] 压缩图片并保存
  7. Android(安卓)平铺背景图片
  8. android 设置 button 不同状态的图片
  9. 11141

随机推荐

  1. 第14天android:存储xml和偏好
  2. Android里merge和include标签的使用
  3. 强烈推荐:Android史上最强大的自定义任务
  4. android 多媒体数据库详解
  5. Android(安卓)Studio编译报Default inter
  6. Android(安卓)无线接口层(Radio Layer Int
  7. android:shape的使用
  8. 【Android】adb shell 命令探索
  9. Android中对Handle机制的理解
  10. Android(安卓)获得图片并解码成缩略图以