fullscreen ImageSwitcher without gallery in Android

android, gallery, imageswitcher, slide, touch-event

Solution

try this way:

imageSwitcher1 = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
imageSwitcher1.setFactory(this);
imageSwitcher1.setInAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_in));
imageSwitcher1.setOutAnimation(AnimationUtils.loadAnimation(this,
android.R.anim.fade_out));
imageSwitcher1.setImageResource(R.drawable.girl2);
imageSwitcher1.setOnTouchListener(new OnTouchListener() { 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
            if (event.getAction() == MotionEvent.ACTION_DOWN) { 
                downX = (int) event.getX();
                return true; 
            } else if (event.getAction() == MotionEvent.ACTION_UP) { 
                upX = (int) event.getX();
                if (upX - downX > 100) {
                imageSwitcher1.setInAnimation(AnimationUtils.loadAnimation(ShowPhotoActivity.this,
                android.R.anim.slide_in_left));
                mageSwitcher1.setOutAnimation(AnimationUtils.loadAnimation(ShowPhotoActivity.this,
                android.R.anim.slide_out_right));
                imageSwitcher1.setImageResource(R.drawable.girl1);
                } else if (downX - upX > 100)//                { 
                imageSwitcher1.setInAnimation(AnimationUtils.loadAnimation(ShowPhotoActivity.this,
                android.R.anim.slide_in_left));
                imageSwitcher1.setOutAnimation(AnimationUtils.loadAnimation(ShowPhotoActivity.this,
                android.R.anim.slide_out_right));
                imageSwitcher1.setImageResource(R.drawable.girl2);
                } 
                return true; 
            } 
            return false; 
        } 
    };

and if u have image array then try this:

imgSwitcher.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    downX = (int) event.getX(); 
                    Log.i("event.getX()", " downX " + downX);
                    return true;
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    upX = (int) event.getX(); 
                    Log.i("event.getX()", " upX " + downX);
                    if (upX - downX > 100) {
                        imgSwitcher.setInAnimation(AnimationUtils
                        .loadAnimation(firstActivity.this,
                         android.R.anim.slide_in_left));
                        imgSwitcher.setOutAnimation(AnimationUtils
                         .loadAnimation(firstActivity.this,
                         android.R.anim.slide_out_right));
                         //curIndex  current image index in array viewed by user
                        curIndex--;
                        if (curIndex < 0) {
                            curIndex = 5;
                        }
                        //IMAGE_LIST :-image list array
                        imgSwitcher.setImageResource(IMAGE_LIST[curIndex]);
                        firstActivity.this.switchTitle(curIndex);
                    } else if (downX - upX > 100) { 
                        imgSwitcher.setInAnimation(AnimationUtils
                        .loadAnimation(firstActivity.this,
                        R.anim.slide_out_left));
                        imgSwitcher.setOutAnimation(AnimationUtils
                        .loadAnimation(firstActivity.this,
                        R.anim.slide_in_right));
                        curIndex++;
                        if (curIndex > 5) {
                            curIndex = 0;
                        }
                        imgSwitcher.setImageResource(IMAGE_LIST[curIndex]);
                        firstActivity.this.switchTitle(curIndex);
                    }
                    return true;
                }
                return false;
            }
        });

Problem

I'm trying to build an application in android, in one of my activities I wanna show full screen images and make them slide left and right by sliding finger on the pictures. I have tried basic gallery view and Image Switcher but I couldn't handle the touch event to have a sliding effect as like in custom android gallery but without thumbnails. Here is my simple image switcher xml and activity class. I would be very appreciated if anybody shows me a way or edits my code below. Thanks in advance... layout xml: ``` <?xml version="1.0" encoding="utf-8"?> <ImageSwitcher xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageSwitcher" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:onClick="imageClick" android:src="@drawable/ic_launcher" android:keepScreenOn="true"> </ImageSwitcher> ``` code : ``` public class GalleryActivity extends Activity implements ViewFactory { private ImageSwitcher imageSwitcher ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activities); imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher); imageSwitcher.setFactory(this); imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); imageSwitcher.setImageResource(R.drawable.menu); imageSwitcher.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { findViewById(R.drawable.menu); imageSwitcher.addView((ImageSwitcher) findViewById(R.drawable.etkinlik)); imageSwitcher.showNext(); return false; } }); } public View makeView() { ImageView iView = new ImageView(this); iView.setScaleType(ImageView.ScaleType.FIT_CENTER); iView.setLayoutParams(new ImageSwitcher.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); iView.setBackgroundColor(0xFF000000); return iView; } } ``` After editing a bit of @imran khan 's solution , here is the code which works quite well. SOLUTION: ``` ImageSwitcher imageSwitcher ; Integer[] imageList = { R.drawable.gallery, R.drawable.menu, R.drawable.promotion, R.drawable.info, R.drawable.activities }; int curIndex=0; int downX,upX; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activities); imageSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher); imageSwitcher.setFactory(this); imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out)); imageSwitcher.setImageResource(imageList[curIndex]); imageSwitcher.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { downX = (int) event.getX(); Log.i("event.getX()", " downX " + downX); return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { upX = (int) event.getX(); Log.i("event.getX()", " upX " + downX); if (upX - downX > 100) { //curIndex current image index in array viewed by user curIndex--; if (curIndex < 0) { curIndex = imageList.length-1; } imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(GalleryActivity.this,R.anim.slide_in_left)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(GalleryActivity.this,R.anim.slide_out_right)); imageSwitcher.setImageResource(imageList[curIndex]); //GalleryActivity.this.setTitle(curIndex); } else if (downX - upX > -100) { curIndex++; if (curIndex > 4) { curIndex = 0; } imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(GalleryActivity.this,R.anim.slide_in_right)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(GalleryActivity.this,R.anim.slide_out_left)); imageSwitcher.setImageResource(imageList[curIndex]); //GalleryActivity.this.setTitle(curIndex); } return true; } return false; } }); } @Override public View makeView() { ImageView i = new ImageView(this); i.setScaleType(ImageView.ScaleType.FIT_CENTER); return i; } ```

Original source