2013-12-23 7 views
6

Ich bin mir nicht sicher, was der beste Titel sein wird, aber mit Bild, wird klar sein, was ich will.Zeige mehr in horizontalen ScrollView in android

Ich habe horizontale Scrollview implementiert, ich habe es benutzerdefiniert gemacht, in dem nur vier Elemente angezeigt werden und wenn der Benutzer das fünfte Element sehen möchte, dann muss er es scrollen. Ich habe es erfolgreich gemacht.

Aber in Android 2.3.3 zeigt es weiße Ansicht am Ende, wenn es mehr Elemente gibt, während in Android 4.0 es nicht zeigt. Siehe das Bild unten:

enter image description here

Schauen Sie hier in Android 2.3, Ich zeige weiß Ansicht den mir klar zu sagen, dass es mehr Tasten ist, aber das gleiche Ergebnis, das ich immer bin nicht in Android 4.0 oder über.
Kann mir jemand helfen, wie man es anzeigt.

+0

Sehen Sie diesen Beitrag: http://stackoverflow.com/questions/8531006/list-color- turns-black-while-scrolling Setzen Sie die Cache-Hinweisfarbe auf transparent. – androidu

+0

Nein @ MarcelCăşvan ist es nicht so, ich möchte diese weiße Ansicht am Ende zeigen, damit Benutzer es verstehen können, dass es mehr Sicht gibt –

+0

Ich sehe, haben Sie in Betracht gezogen, die scrollview zu animieren, wenn der Benutzer mit dieser Aktivität vorgestellt wird? Wie animiere die Schriftrolle vom letzten Punkt auf der rechten Seite zum ersten – androidu

Antwort

3

Sie leicht, dieses Verhalten durch eine Erweiterung des HorizontalScrollView Widget und Zeichnung zwei richtig platziert images/Drawables replizieren können:

public class CustomHorizontalScrollView extends HorizontalScrollView { 

    private static final int SHADOW_WIDTH = 35; 
    private GradientDrawable mDrawableLeft; 
    private GradientDrawable mDrawableRight; 
    private Rect mBounds = new Rect(); 

    public CustomHorizontalScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mDrawableLeft = new GradientDrawable(Orientation.LEFT_RIGHT, 
       new int[] { Color.GRAY, Color.TRANSPARENT }); 
     mDrawableRight = new GradientDrawable(Orientation.RIGHT_LEFT, 
       new int[] { Color.GRAY, Color.TRANSPARENT }); 
    } 

    @Override 
    protected void dispatchDraw(Canvas canvas) { 
     super.dispatchDraw(canvas); 
     // the scroll value 
     final int offset = this.getScrollX(); 
     mBounds.setEmpty(); 
     mBounds.bottom = getMeasuredHeight(); 
     // check made to remove the shadow if we are at the left edge of the 
     // screen so we don't interfere with the edge effect 
     if (offset != 0) { 
      // left drawable 
      mBounds.left = offset; 
      mBounds.right = offset + SHADOW_WIDTH; 
      mDrawableLeft.setBounds(mBounds); 
      mDrawableLeft.draw(canvas); 
     } 
     // check made to remove the shadow if we are at the right edge of the 
     // screen so we don't interfere with the edge effect 
     if ((offset + getMeasuredWidth()) < computeHorizontalScrollRange()) { 
      // right drawable 
      mBounds.left = offset + getMeasuredWidth() - SHADOW_WIDTH; 
      mBounds.right = offset + getMeasuredWidth(); 
      mDrawableRight.setBounds(mBounds); 
      mDrawableRight.draw(canvas); 
     } 
    } 

} 
+0

Vielen Dank @Luksprog es funktioniert gut –