2012-04-06 5 views
4

Ich versuche, eine Anwendung in Android zu erstellen, in einer meiner Aktivitäten Ich möchte Vollbild-Bilder zeigen und sie nach links und rechts schieben, indem Sie Finger auf die Bilder gleiten.fullscreen ImageSwitcher ohne Galerie in Android

Ich habe grundlegende Galerieansicht und Bildumschalter ausprobiert, aber ich konnte nicht mit dem Berührungsereignis umgehen, um einen Gleiteffekt wie in der benutzerdefinierten Android-Galerie zu haben, aber ohne Thumbnails.

Hier ist meine einfache Image Switcher XML und Aktivitätsklasse. Ich würde sehr geschätzt werden, wenn jemand mir einen Weg zeigt oder meinen Code unten bearbeitet. Vielen Dank im Voraus ...

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

Nach der Bearbeitung ein bisschen @imran khan ‚s Lösung, hier ist der Code, der recht gut funktioniert .

LÖSUNG:

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

Was passiert, wenn Sie diesen Code ausführen? –

+0

Ich sehe nur das Bild auf dem gesamten Bildschirm und es endet bei Berührung.Ich habe eine Lösung für diese, aber ich habe ein anderes Problem, können Sie einen Blick, wenn Sie möchten. – osayilgan

+0

ok osayilgan sehe meine Antwort und versuche es auf ImageSwitcher onTouch.i hoffe hilfreich –

Antwort

2

versuchen auf diese Weise:

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

und wenn u-Bildfeld haben, dann versuchen Sie dieses:

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; 
      } 
     }); 
+0

imran, es hat nicht funktioniert. – osayilgan

+0

Es zeigt schwarzen Bildschirm und stürzt bei Berührung ab. – osayilgan

+0

Jetzt funktioniert es, Sie können meine Bearbeitung als eine Lösung überprüfen. Danke nochmal imran khan. – osayilgan

1

würde ich empfehlen, die compatability library und dann den view pager zu verwenden. Auf diese Weise wird Android das ganze schwere Heben für Sie tun und alles, was Sie tun müssen, ist dem ViewPager zu sagen, wie viele Bilder Sie haben und was sie sind.

Hier ist ein Beispiel von Google, dass ich ein bisschen für dich geändert habe.

public class FragmentPagerSupport extends FragmentActivity { 
static final int NUM_ITEMS = 10; 

MyAdapter mAdapter; 

ViewPager mPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 

    mAdapter = new MyAdapter(getSupportFragmentManager()); 

    mPager = (ViewPager)findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 

    // Watch for button clicks. 
    Button button = (Button)findViewById(R.id.goto_first); 
    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      mPager.setCurrentItem(0); 
     } 
    }); 
    button = (Button)findViewById(R.id.goto_last); 
    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      mPager.setCurrentItem(NUM_ITEMS-1); 
     } 
    }); 
} 

public static class MyAdapter extends FragmentPagerAdapter { 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return ArrayListFragment.newInstance(position); 
    } 
} 

public static class ArrayListFragment extends ListFragment { 
    int mNum; 

    /** 
    * Create a new instance of CountingFragment, providing "num" 
    * as an argument. 
    */ 
    static ArrayListFragment newInstance(int num) { 
     ArrayListFragment f = new ArrayListFragment(); 

     // Supply num input as an argument. 
     Bundle args = new Bundle(); 
     args.putInt("num", num); 
     f.setArguments(args); 

     return f; 
    } 

    /** 
    * When creating, retrieve this instance's number from its arguments. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mNum = getArguments() != null ? getArguments().getInt("num") : 1; 
    } 

    /** 

    */ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_pager_list, container, false); 
     View tv = v.findViewById(R.id.text); 
     ((ImageView)tv).setImageDrawable(#INSERT YOUR IMAGEHERE) //you can pass the id of the drawable into the mNum. Or you could make it a String instead of int and pass the url. 
     return v; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_list_item_1, Cheeses.sCheeseStrings)); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     Log.i("FragmentList", "Item clicked: " + id); 
    } 
} 
} 

EDIT: Sorry, dass die Formatierung etwas aus ist ...

+1

Danke für den Rat, ich denke, ich habe einen Weg gefunden. Aber ich weiß nicht, wie es richtig ist. Was ich auf diese Weise mache, ist die grundlegende Änderung der Größe des Galerieansichtsbereichs in der benutzerdefinierten Galerieansicht. Auf diese Weise kann ich nicht nur Berührungsereignisse hören, sondern auch benutzerdefinierte Galerieansichtsfunktionen verwenden, einschließlich der Folie nach rechts und links. Hier ist mein Code unten. – osayilgan