Ich möchte Horizontal ScrollView
mit einigen Funktionen der Galerie implementieren ,
In der Galerie wird die in einiger Entfernung erstellte Schriftrolle paarweise angeordnet. Wenn also drei Bilder auf dem Bildschirm angezeigt werden, wird durch Klicken auf das letzte Bild in der Mitte angeordnet.
Wie würde ich HorizontalSCrollView
wie erwähnt implementieren ?
Antworten:
Versuchen Sie diesen Code:
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<LinearLayout> 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<LinearLayout>(); 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; } }
Lassen Sie mich wissen, wenn ein Problem Spaß macht ...
quelle
Hier ist mein Layout:
<HorizontalScrollView android:id="@+id/horizontalScrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="@dimen/padding" > <LinearLayout android:id="@+id/shapeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" > </LinearLayout> </HorizontalScrollView>
Und ich fülle es im Code mit dynamischen Kontrollkästchen.
quelle
Hier ist ein gutes Tutorial mit Code. Lassen Sie mich wissen, ob es für Sie funktioniert! Dies ist auch ein gutes Tutorial.
BEARBEITEN
In diesem Beispiel müssen Sie lediglich die folgende Zeile hinzufügen:
gallery.setSelection(1);
Nach dem Setzen des Adapters auf das Galerieobjekt ist dies die folgende Zeile:
gallery.setAdapter(new ImageAdapter(this));
UPDATE1
Okay, ich habe dein Problem. Diese Open Source Bibliothek ist Ihre Lösung. Ich habe es auch für eines meiner Projekte verwendet. Hoffe das wird dein Problem endlich lösen.
UPDATE2:
Ich würde Ihnen empfehlen, dieses Tutorial durchzugehen . Sie könnten eine Idee bekommen. Ich glaube ich habe dein Problem, du willst die horizontale Bildlaufansicht mit Schnappschuss . Versuchen Sie, mit diesem Schlüsselwort auf Google oder hier draußen zu suchen. Möglicherweise erhalten Sie Ihre Lösung.
quelle
Sie können HorizontalScrollView verwenden, um das horizontale Scrollen zu implementieren.
Code
<HorizontalScrollView android:id="@+id/hsv" android:layout_width="fill_parent" android:layout_height="100dp" android:layout_weight="0" android:fillViewport="true" android:measureAllChildren="false" android:scrollbars="none" > <LinearLayout android:id="@+id/innerLay" android:layout_width="wrap_content" android:layout_height="100dp" android:gravity="center_vertical" android:orientation="horizontal" > </LinearLayout> </HorizontalScrollView>
Featured.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="160dp" android:layout_margin="4dp" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <ProgressBar android:layout_width="15dip" android:layout_height="15dip" android:id="@+id/progress" android:layout_centerInParent="true" /> <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#20000000" /> <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="30dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:gravity="center" android:textColor="#000000" android:background="#ffffff" android:text="Image Text" /> </RelativeLayout> </LinearLayout>
Java Code:
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; }
Hinweis: Um ein verzögertes Laden zu implementieren, verwenden Sie bitte diesen Link für AQUERY
https://code.google.com/p/android-query/wiki/ImageLoading
quelle
Ich habe etwas Ähnliches mit Horizontal Variable ListView implementiert. Der einzige Nachteil ist, dass es nur mit Android 2.3 und höher funktioniert.
Die Verwendung dieser Bibliothek ist so einfach wie die Implementierung einer ListView mit einem entsprechenden Adapter. Die Bibliothek bietet auch ein Beispiel
quelle
Ich habe in jeder Zeile von ListView eine horizontale ListView erstellt, wenn Sie eine einzelne möchten. Sie können Folgendes tun
Hier erstelle ich gerade horizontalListView von Thumbnail von Videos wie diesem
Die Idee ist einfach, die ImageView kontinuierlich dem untergeordneten Element von LinearLayout in HorizontalscrollView hinzuzufügen
Hinweis: Denken daran, .removeAllViews () auszulösen. Vor dem nächsten Laden wird ein doppeltes untergeordnetes Element hinzugefügt
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); } }
Meine XML für HorizontalListView
<HorizontalScrollView android:id="@+id/horizontalScrollView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/linearLayoutTitle" android:background="@drawable/shelf" android:paddingBottom="@dimen/Playlist_TopBottom_margin" android:paddingLeft="@dimen/playlist_RightLeft_margin" android:paddingRight="@dimen/playlist_RightLeft_margin" android:paddingTop="@dimen/Playlist_TopBottom_margin" > <LinearLayout android:id="@+id/linearLayoutVideos" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left|center_vertical" android:orientation="horizontal" > </LinearLayout> </HorizontalScrollView>
und auch meine Bildansicht als jedes Kind
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageViewThumb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginRight="20dp" android:adjustViewBounds="true" android:background="@android:color/transparent" android:contentDescription="@string/action_settings" android:cropToPadding="true" android:maxHeight="200dp" android:maxWidth="240dp" android:padding="@dimen/playlist_image_padding" android:scaleType="centerCrop" android:src="@drawable/loading" />
Um mehr zu erfahren, können Sie den folgenden Links folgen, die einige einfache Beispiele enthalten
quelle