2010-06-08 17 views
7

Voglio creare slideshow di immagini in Android.esempio di presentazione di immagini in Android?

Ho molte immagini in Android GridView ora voglio aprire la presentazione manuale se si fa clic su qualsiasi immagine in modo che io possa vederlo muovendo il dito a sinistra oa destra accanto e le immagini precedenti come Android integrato nella galleria.

Qualcuno mi guida come ottenere questo?

qualsiasi aiuto sarebbe apprezzato.

risposta

6

si possono trovare esempio di Gallery1 e Gallery2 in ApiDemos:

c:\android-sdk-windows\samples\android-7\ApiDemos\src\com\example\android\apis\view\

+0

senza entrambi non sono utili voglio aprire l'immagine sul lato pieno poi scorri verso sinistra e destra manualmente come aprire l'immagine a schermo intero con il cursore? – UMAR

+3

è sufficiente creare un ImageView a schermo intero (imposta larghezza e altezza su fill_parent) e aggiungere un SimpleGestureListener per riconoscere il gesto onFling.quando viene riconosciuto, cambia l'immagine in ImageView. – reflog

+1

E l'animazione? E i gesti? Che mi dici di pizzicare e zoomare? ruotare? tagliare? imposta come sfondo? ecc. Il problema è che la galleria 3d non può essere riutilizzata !!! –

19

provare questo codice se si utilizza ViewFlipper per visualizzare le immagini

slideShowBtn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

       runnable = new Runnable() { 

        @Override 
        public void run() { 
         handler.postDelayed(runnable, 3000); 
         imageFrame.showNext(); 

        } 
       }; 
       handler.postDelayed(runnable, 500); 
      } 
     }); 

Per fermarlo utilizzare handler.removeCallbacks(runnable);

public class PhotoSlideShowActivity extends Activity implements OnClickListener { 

    private static final int SWIPE_MIN_DISTANCE = 120; 
    private static final int SWIPE_MAX_OFF_PATH = 250; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
    private GestureDetector gestureDetector; 
    View.OnTouchListener gestureListener; 
    ViewFlipper imageFrame; 
    RelativeLayout slideShowBtn; 
    Handler handler; 
    Runnable runnable; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.photo_slideshow_main); 
     imageFrame = (ViewFlipper) findViewById(R.id.imageFrames); 

       //get sd card path for images 

     File parentFolder = new 
     File(Environment.getExternalStorageDirectory() 
     .getAbsolutePath() 
     + "/images"); 

     addFlipperImages(imageFrame, parentFolder); 
     // Gesture detection 
     gestureDetector = new GestureDetector(new MyGestureDetector()); 
     gestureListener = new View.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) 
        return true; 
       else 
        return false; 
      } 
     }; 
     handler = new Handler(); 
     imageFrame.setOnClickListener(PhotoSlideShowActivity.this); 
     imageFrame.setOnTouchListener(gestureListener); 
     slideShowBtn = (RelativeLayout) findViewById(R.id.slideShowBtn); 
     slideShowBtn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 

       runnable = new Runnable() { 

        @Override 
        public void run() { 
         handler.postDelayed(runnable, 3000); 
         imageFrame.showNext(); 

        } 
       }; 
       handler.postDelayed(runnable, 500); 
      } 
     }); 

    } 

    private void addFlipperImages(ViewFlipper flipper, File parent) { 
     int imageCount = parent.listFiles().length; 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.FILL_PARENT, 
       RelativeLayout.LayoutParams.FILL_PARENT); 
     for (int count = 0; count < imageCount - 1; count++) { 
      ImageView imageView = new ImageView(this); 
      Bitmap imbm = BitmapFactory.decodeFile(parent.listFiles()[count] 
        .getAbsolutePath()); 
      imageView.setImageBitmap(imbm); 
      imageView.setLayoutParams(params); 
      flipper.addView(imageView); 
     } 

    } 
    class MyGestureDetector extends SimpleOnGestureListener { 
     @SuppressWarnings("static-access") 
     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) { 
      // TODO Auto-generated method stub 
      slideShowBtn = (RelativeLayout) findViewById(R.id.slideShowBtn); 
      slideShowBtn.setVisibility(slideShowBtn.VISIBLE); 
      handler.removeCallbacks(runnable); 
      runnable = new Runnable() { 

       @Override 
       public void run() { 
        slideShowBtn.setVisibility(slideShowBtn.INVISIBLE); 
       } 
      }; 
      handler.postDelayed(runnable, 2000); 
      return true; 
     } 
     @SuppressWarnings("static-access") 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
      // TODO Auto-generated method stub 
      slideShowBtn = (RelativeLayout) findViewById(R.id.slideShowBtn); 
      slideShowBtn.setVisibility(slideShowBtn.VISIBLE); 
      handler.removeCallbacks(runnable); 
      runnable = new Runnable() { 

       @Override 
       public void run() { 
        slideShowBtn.setVisibility(slideShowBtn.INVISIBLE); 
       } 
      }; 
      handler.postDelayed(runnable, 2000); 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 
      try { 
       if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
        return false; 
       // right to left swipe 
       if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        handler.removeCallbacks(runnable); 
        imageFrame.setInAnimation(inFromRightAnimation()); 
        imageFrame.setOutAnimation(outToLeftAnimation()); 
        imageFrame.showNext(); 
       } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
        handler.removeCallbacks(runnable); 
        imageFrame.setInAnimation(inFromLeftAnimation()); 
        imageFrame.setOutAnimation(outToRightAnimation()); 
        imageFrame.showPrevious(); 
       } 
      } catch (Exception e) { 
       // nothing 
      } 
      return false; 
     } 

    } 

    @Override 
    public void onClick(View view) { 

    } 

    private Animation inFromRightAnimation() { 

     Animation inFromRight = new TranslateAnimation(
       Animation.RELATIVE_TO_PARENT, +1.2f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f); 
     inFromRight.setDuration(500); 
     inFromRight.setInterpolator(new AccelerateInterpolator()); 
     return inFromRight; 
    } 
    private Animation outToLeftAnimation() { 
     Animation outtoLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, -1.2f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f); 
     outtoLeft.setDuration(500); 
     outtoLeft.setInterpolator(new AccelerateInterpolator()); 
     return outtoLeft; 
    } 
    private Animation inFromLeftAnimation() { 
     Animation inFromLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_PARENT, -1.2f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f); 
     inFromLeft.setDuration(500); 
     inFromLeft.setInterpolator(new AccelerateInterpolator()); 
     return inFromLeft; 
    } 
    private Animation outToRightAnimation() { 
     Animation outtoRight = new TranslateAnimation(
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, +1.2f, 
       Animation.RELATIVE_TO_PARENT, 0.0f, 
       Animation.RELATIVE_TO_PARENT, 0.0f); 
     outtoRight.setDuration(500); 
     outtoRight.setInterpolator(new AccelerateInterpolator()); 
     return outtoRight; 
    } 

} 

Layout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ViewFlipper 
     android:id="@+id/imageFrames" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@android:drawable/screen_background_dark" > 
    </ViewFlipper> 

    <RelativeLayout 
     android:id="@+id/slideShowBtn" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_alignParentBottom="true" 
     android:gravity="center" android:visibility="invisible"> 

     <RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="#33FFFFFF" 
      android:gravity="center" 
      android:paddingLeft="1dp" 
      android:paddingRight="1dp" 
      android:paddingTop="1dp" > 

      <RelativeLayout 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:background="#66000000" 
       android:gravity="center" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="fill_parent" 
        android:gravity="center" 
        android:text="Slideshow" 
        android:textSize="18dp" /> 
      </RelativeLayout> 
     </RelativeLayout> 
    </RelativeLayout> 

</RelativeLayout> 
+0

Fornire XML anche per favore. Se una persona può scrivere XML leggendo questo, non leggerà questo in primo luogo. – Jaseem

+0

bella risposta ..non ho capito perché la gente lo desse + 1.Da parte mia +1 – Sameer

+0

ty sameer :) .. in qualsiasi momento .. – Chet

11

è molto facile da applicare presentazione utilizzando ViewFlipper in Android.

inserire le immagini nella cartella disegnabile e seguire il codice riportato di seguito.

slide_show.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ViewFlipper 
     android:id="@+id/myflipper" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center" > 
    </ViewFlipper> 

</LinearLayout> 

SlideShowActivity.java

package com.example.viewpagerexample; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.widget.ImageView; 
import android.widget.ViewFlipper; 

public class SlideShowActivity extends Activity { 

    private ViewFlipper myViewFlipper; 
    private float initialXPoint; 
    int[] image = { R.drawable.one_full, R.drawable.two_full, 
     R.drawable.three_full, R.drawable.four_full, R.drawable.five_full, 
     R.drawable.six_full, R.drawable.seven_full, R.drawable.eight_full, 
     R.drawable.nine_full, R.drawable.ten_full }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.slide_show); 
    myViewFlipper = (ViewFlipper) findViewById(R.id.myflipper); 

    for (int i = 0; i < image.length; i++) { 
     ImageView imageView = new ImageView(SlideShowActivity.this); 
     imageView.setImageResource(image[i]); 
     myViewFlipper.addView(imageView); 
    } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     initialXPoint = event.getX(); 
     break; 
    case MotionEvent.ACTION_UP: 
     float finalx = event.getX(); 
     if (initialXPoint > finalx) { 
      if (myViewFlipper.getDisplayedChild() == image.length) 
       break; 
      myViewFlipper.showNext(); 
     } else { 
      if (myViewFlipper.getDisplayedChild() == 0) 
       break; 
      myViewFlipper.showPrevious(); 
     } 
     break; 
    } 
    return false; 
    } 
} 

Qui le immagini sono solo cambiando mentre l'utente è colpo.

Se si desidera scorrere automaticamente certo intervallo di aggiungere il seguente codice

myViewFlipper.setAutoStart(true); 
myViewFlipper.setFlipInterval(3000); 
myViewFlipper.startFlipping(); 
+0

Funziona bene ma come ridimensionare l'immagine al centro? Vedo dello spazio vuoto sul lato sinistro e destro dell'immagine. –

+0

Salve, ho aggiunto questa riga: imageView.setScaleType (ScaleType.CENTER_CROP); –

+0

Ho un problema, sta esaurendo la memoria. È il loro modo di risolvere questo errore? Ricevo 'Impossibile allocare un'assegnazione di byte 52920012 con 4194304 byte liberi e 31 MB fino a OOM' –

0

provare questi qui di seguito il codice sorgente:

MainActivity.java:

package com.example.splashanimation; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ViewFlipper; 

public class MainActivity extends Activity { 

    int mFlipping = 0 ; // Initially flipping is off 
    Button mButton ; // Reference to button available in the layout to start and stop the flipper 

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

     /** Click event handler for button */ 


       ViewFlipper flipper = (ViewFlipper) findViewById(R.id.flipper1); 


        /** Start Flipping */ 
        flipper.startFlipping(); 
        mFlipping=1; 

      } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

activity_main .xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 



    <ViewFlipper 
     android:id="@+id/flipper1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:flipInterval="3000" 
     android:inAnimation="@anim/slide_in_right" 
     android:outAnimation="@anim/slide_in_left" 
     android:layout_centerInParent="true" > 

     <ImageView 
      android:src="@drawable/img1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:contentDescription="@string/str_img1" 
      android:layout_gravity="center_horizontal" /> 

     <ImageView 
      android:src="@drawable/img2" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:contentDescription="@string/str_img2" 
      android:layout_gravity="center_horizontal" /> 

     <ImageView 
      android:src="@drawable/img3" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:contentDescription="@string/str_img3" 
      android:layout_gravity="center_horizontal" /> 

     <ImageView 
      android:src="@drawable/img4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:contentDescription="@string/str_img4" 
      android:layout_gravity="center_horizontal" /> 

     <ImageView 
      android:src="@drawable/img5" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:contentDescription="@string/str_img5" 
      android:layout_gravity="center_horizontal" /> 

    </ViewFlipper> 

</RelativeLayout> 

In res/anim/slide_in_left.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator" > 
    <translate 
     android:fromXDelta="0" 
     android:toXDelta="-100%p" 
     android:duration="500"/> 
</set> 

In res/anim/slide_in_right.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/decelerate_interpolator"> 
    <translate 
     android:fromXDelta="100%p" 
     android:toXDelta="0" 
     android:duration="500"/> 
</set> 
Problemi correlati