¿Cómo implementar HorizontalScrollView like Gallery?

Quiero implementar Horizontal ScrollView con algunas características de Gallery, enter image description here

En la Galería, el desplazamiento hecho a cierta distancia lo ordena en pares, es decir, si tenemos tres imágenes mostradas en la pantalla, al hacer clic en la última imagen lo arreglaremos en el centro.

¿Cómo implementaría HorizontalSCrollView como se menciona?

    Prueba este código:

    activity_main.xml

                                                                  

    grid_item.xml

     < ?xml version="1.0" encoding="utf-8"?>    

    MainActivity.java

     import java.util.ArrayList; import android.app.Activity; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.view.Display; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; public class MainActivity extends Activity { LinearLayout asthmaActionPlan, controlledMedication, asNeededMedication, rescueMedication, yourSymtoms, yourTriggers, wheezeRate, peakFlow; LayoutParams params; LinearLayout next, prev; int viewWidth; GestureDetector gestureDetector = null; HorizontalScrollView horizontalScrollView; ArrayList layouts; int parentLeft, parentRight; int mWidth; int currPosition, prevPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); prev = (LinearLayout) findViewById(R.id.prev); next = (LinearLayout) findViewById(R.id.next); horizontalScrollView = (HorizontalScrollView) findViewById(R.id.hsv); gestureDetector = new GestureDetector(new MyGestureDetector()); asthmaActionPlan = (LinearLayout) findViewById(R.id.asthma_action_plan); controlledMedication = (LinearLayout) findViewById(R.id.controlled_medication); asNeededMedication = (LinearLayout) findViewById(R.id.as_needed_medication); rescueMedication = (LinearLayout) findViewById(R.id.rescue_medication); yourSymtoms = (LinearLayout) findViewById(R.id.your_symptoms); yourTriggers = (LinearLayout) findViewById(R.id.your_triggers); wheezeRate = (LinearLayout) findViewById(R.id.wheeze_rate); peakFlow = (LinearLayout) findViewById(R.id.peak_flow); Display display = getWindowManager().getDefaultDisplay(); mWidth = display.getWidth(); // deprecated viewWidth = mWidth / 3; layouts = new ArrayList(); params = new LayoutParams(viewWidth, LayoutParams.WRAP_CONTENT); asthmaActionPlan.setLayoutParams(params); controlledMedication.setLayoutParams(params); asNeededMedication.setLayoutParams(params); rescueMedication.setLayoutParams(params); yourSymtoms.setLayoutParams(params); yourTriggers.setLayoutParams(params); wheezeRate.setLayoutParams(params); peakFlow.setLayoutParams(params); layouts.add(asthmaActionPlan); layouts.add(controlledMedication); layouts.add(asNeededMedication); layouts.add(rescueMedication); layouts.add(yourSymtoms); layouts.add(yourTriggers); layouts.add(wheezeRate); layouts.add(peakFlow); next.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Handler().postDelayed(new Runnable() { public void run() { horizontalScrollView.smoothScrollTo( (int) horizontalScrollView.getScrollX() + viewWidth, (int) horizontalScrollView.getScrollY()); } }, 100L); } }); prev.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Handler().postDelayed(new Runnable() { public void run() { horizontalScrollView.smoothScrollTo( (int) horizontalScrollView.getScrollX() - viewWidth, (int) horizontalScrollView.getScrollY()); } }, 100L); } }); horizontalScrollView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (gestureDetector.onTouchEvent(event)) { return true; } return false; } }); } class MyGestureDetector extends SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getX() < e2.getX()) { currPosition = getVisibleViews("left"); } else { currPosition = getVisibleViews("right"); } horizontalScrollView.smoothScrollTo(layouts.get(currPosition) .getLeft(), 0); return true; } } public int getVisibleViews(String direction) { Rect hitRect = new Rect(); int position = 0; int rightCounter = 0; for (int i = 0; i < layouts.size(); i++) { if (layouts.get(i).getLocalVisibleRect(hitRect)) { if (direction.equals("left")) { position = i; break; } else if (direction.equals("right")) { rightCounter++; position = i; if (rightCounter == 2) break; } } } return position; } } 

    Avíseme si algún problema disfruta ...

    Aquí está mi diseño:

          

    Y lo rellene en el código con cuadros de verificación dynamics.

    Aquí hay un buen tutorial con código. ¡Avíseme si funciona para usted! Este es también un buen tutorial.

    EDITAR

    En este ejemplo, todo lo que necesita hacer es agregar esta línea:

     gallery.setSelection(1); 

    después de configurar el adaptador al objeto de la galería, esa es la línea:

     gallery.setAdapter(new ImageAdapter(this)); 

    ACTUALIZACIÓN1

    De acuerdo, tengo tu problema. Esta biblioteca de código abierto es su solución. También lo he usado para uno de mis proyectos. Espero que esto solucione tu problema finalmente.

    ACTUALIZACIÓN2:

    Sugeriría que revises este tutorial . Puede tener una idea. Creo que tengo tu problema, quieres la vista de desplazamiento horizontal con un chasquido . Intente buscar con esa palabra clave en google o aquí, puede obtener su solución.

    Implementé algo similar con el ListView de variables horizontales. El único inconveniente es que funciona solo con Android 2.3 y versiones posteriores.

    Usar esta biblioteca es tan simple como implementar un ListView con un Adaptador correspondiente. La biblioteca también proporciona un ejemplo

    He creado un ListView horizontal en cada fila de ListView si quieres solo. Puedes hacer lo siguiente

    Aquí solo estoy creando horizontalListView of Thumbnail of Videos Like this

    enter image description here

    La idea es simplemente agregar continuamente el ImageView al hijo de LinearLayout en HorizontalscrollView

    Nota: recuerde disparar .removeAllViews (); antes de la próxima carga de otro modo se agregará un niño duplicado

     Cursor mImageCursor = db.getPlaylistVideoImage(playlistId); mVideosThumbs.removeAllViews(); if (mImageCursor != null && mImageCursor.getCount() > 0) { for (int index = 0; index < mImageCursor.getCount(); index++) { mImageCursor.moveToPosition(index); ImageView iv = (ImageView) imageViewInfalter.inflate( R.layout.image_view, null); name = mImageCursor.getString(mImageCursor .getColumnIndex("LogoDefaultName")); logoFile = new File(MyApplication.LOCAL_LOGO_PATH, name); if (logoFile.exists()) { Uri uri = Uri.fromFile(logoFile); iv.setImageURI(uri); } iv.setScaleType(ScaleType.FIT_XY); mVideosThumbs.addView(iv); } mImageCursor.close(); mImageCursor = null; } else { ImageView iv = (ImageView) imageViewInfalter.inflate( R.layout.image_view, null); String name = ""; File logoFile; name = mImageCursor.getString(mImageCursor .getColumnIndex("LogoMediumName")); logoFile = new File(MyApplication.LOCAL_LOGO_PATH, name); if (logoFile.exists()) { Uri uri = Uri.fromFile(logoFile); iv.setImageURI(uri); } } 

    Mi xml para HorizontalListView

         

    y también mi vista de imagen como cada niño

     < ?xml version="1.0" encoding="utf-8"?>  

    Para obtener más información, puede seguir los siguientes enlaces que tienen algunas muestras fáciles

    1. http://www.dev-smart.com/?p=34
    2. Horizontal ListView en Android?

    Puede usar HorizontalScrollView para implementar el desplazamiento horizontal. Código

         

    featured.xml:

     < ?xml version="1.0" encoding="utf-8"?>        

    Código de Java:

      LayoutInflater inflater; inflater=getLayoutInflater(); LinearLayout inLay=(LinearLayout) findViewById(R.id.innerLay); for(int x=0;x<10;x++) { inLay.addView(getView(x)); } View getView(final int x) { View rootView = inflater.inflate( R.layout.featured_item,null); ImageView image = (ImageView) rootView.findViewById(R.id.image); //Thease Two Line is sufficient my dear to implement lazyLoading AQuery aq = new AQuery(rootView); String url="http://farm6.static.flickr.com/5035/5802797131_a729dac808_s.jpg"; aq.id(image).progress(R.id.progress).image(url, true, true, 0, R.drawable.placeholder1); image.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Toast.makeText(PhotoActivity.this, "Click Here Postion "+x, Toast.LENGTH_LONG).show(); } }); return rootView; } 

    Nota: para implementar lazyloading use este enlace para AQUIERY

    https://code.google.com/p/android-query/wiki/ImageLoading