¿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

     

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

   

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:

         

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