2013-02-15 43 views
5

Sonraki ve Önceki düğmelerle android uygulamasında yatay kaydırma görünümüm var. Bu düğmelerin yalnızca scllview'ın scrolling.ie olması gerektiğinde, scrollview içeriğinin genişliği ekran genişliğini aştığında göstermek istiyorum.Ayrıca, ulaşırken önceki ve Sonraki düğmeleri gizlemek istiyorum sırasıyla ilk ve son öğeler. Bu düğmelere tıkladığınızda sonraki/önceki öğelere nasıl geçilir?Bir HorizontalScrollView düğmesi nasıl kaydırılır?

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/mainLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#ffffff" > 

     <Button 
      android:id="@+id/btnPrevoius" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:text="Previous" 
      android:visibility="gone" /> 

     <HorizontalScrollView 
      android:id="@+id/horizontalScrollView1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="5dip" 
      android:layout_marginRight="5dip" 
      android:layout_toLeftOf="@+id/btnNext" 
      android:layout_toRightOf="@+id/btnPrevoius" 
      android:fillViewport="true" > 

      <LinearLayout 
       android:id="@+id/linearLayout1" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
      </LinearLayout> 
     </HorizontalScrollView> 

     <Button 
      android:id="@+id/btnNext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" 
      android:text="Next" 
      android:visibility="gone" /> 

    </RelativeLayout> 

aktivite

public class SampleActivity extends Activity { 
      private static LinearLayout linearLayout; 
      private static HorizontalScrollView horizontalScrollView; 
      private static Button btnPrevious; 
      private static Button btnNext; 
      private static int displayWidth = 0; 
      private static int arrowWidth = 0; 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1); 
       linearLayout = (LinearLayout) findViewById(R.id.linearLayout1); 
       btnPrevious = (Button) findViewById(R.id.btnPrevoius); 
       btnNext = (Button) findViewById(R.id.btnNext); 
       for (int i = 0; i < 15; i++) { 
        Button button = new Button(this); 
        button.setTag(i); 
        button.setText("---"); 
        linearLayout.addView(button); 
       } 
       ViewTreeObserver vto = linearLayout.getViewTreeObserver(); 
       vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

        @Override 
        public void onGlobalLayout() { 
         ViewTreeObserver obs = linearLayout.getViewTreeObserver(); 
         obs.removeGlobalOnLayoutListener(this); 
         Display display = getWindowManager().getDefaultDisplay(); 
         displayWidth = display.getWidth(); 
         if (linearLayout.getMeasuredWidth() > (displayWidth - 40)) { 
          btnPrevious.setVisibility(View.VISIBLE); 
          btnNext.setVisibility(View.VISIBLE); 
         } 
        } 

       }); 
       btnPrevious.setOnClickListener(listnerLeftArrowButton); 
       horizontalScrollView.setOnTouchListener(listenerScrollViewTouch); 
      } 

      private OnTouchListener listenerScrollViewTouch = new OnTouchListener() { 

       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        showHideViews(); 
        return false; 
       } 
      }; 

      private OnClickListener listnerLeftArrowButton = new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        horizontalScrollView.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(0, 0)); 
       } 
      }; 


     public static void showHideViews() { 
      int maxScrollX = horizontalScrollView.getChildAt(0).getMeasuredWidth()- displayWidth; 
      Log.e("TestProjectActivity", "scroll X = " +horizontalScrollView.getScrollX()); 
      Log.i("TestProjectActivity", "scroll Width = " +horizontalScrollView.getMeasuredWidth()); 
      Log.d("TestProjectActivity", "Max scroll X = " + maxScrollX); 

      if (horizontalScrollView.getScrollX() == 0) { 
       hideLeftArrow(); 
      } else { 
       showLeftArrow(); 
      } 
      if (horizontalScrollView.getScrollX() == maxScrollX) { 
       showRightArrow(); 
      } else { 
       //hideRightArrow(); 
      } 
     } 

     private static void hideLeftArrow() { 
      btnPrevious.setVisibility(View.GONE); 
     } 

     private static void showLeftArrow() { 
      btnPrevious.setVisibility(View.VISIBLE); 
     } 

     private static void hideRightArrow() { 
      btnNext.setVisibility(View.GONE); 
     } 

     private static void showRightArrow() { 
      btnNext.setVisibility(View.VISIBLE); 
     } 
    } 

'maxScrollX' değeri benim için doğru değil. Bunun için maksimum scrollvalue nasıl bulunur? Şimdiden Teşekkür

cevap

1
+0

Üzgünüm. Bu yayınların sorunumu nasıl çözebileceğini anlayamadım. –

+0

@DevuSoman gönderdiğim bağlantılara bakmış, yatay kaydırma görünümü bu şekilde çalışmaktadır. Ayrıca bu düğmeyi gizlemek istiyorsanız, ilk koşul için yanlışlık ayarını geçersiz kıldınız ve tersini yapınız. ilgili düğmeleri onclick dinleyici ve seçiminize göre istediğinizi yapın .... –

+0

@DevuSoman tam olarak ne istiyorsun..U sadece yayınlama ve küçük düzen uyumunu ayarlamak zorunda kaldı. düğmelerdeki tıklama dinleyicisine uygulamanız yeterlidir .. ur choice.according'a tıkladıktan sonra tıklama yapmak ister misiniz? –

4

Bu biraz geç gelebilir, ancak bu sorunla karşı karşıya gelecek orada herkes için ben alternatif bir çözüm (ler) düşündürmektedir.

İlk olarak, HorizontalScrollView'den farklı bir bileşen kullanın. projenize Bu sınıf eklemek (com.yourproject.widgets gibi bir şey, ayrı bir paket oluşturmak) -Horizontal ListView:

SEÇENEK 1: İşte seçeneklerdir. Ayrıca, özel Bağdaştırıcı oluşturmanız gerekecek, bunun nasıl yapıldığını görmek için bu example. Ayrı bir adaptör sınıfı (exp. HorizontalListViewAdapter) oluşturmanızı ve önceden oluşturulmuş com.yourproject.widgets paketine koymanızı öneririm.

<com.yourproject.widgets.HorizontalListView android:id="@+id/hList" android:layout_width="match_parent" android:layout_height="wrap_content"/> 
  • referans bu:

    • gibi bir şey eklemeniz gerekir xml (kaydırma davranışını taklit etmek gerek düğmeleri arasında koyun) içinde düzeninize bu widget eklemek aracını kullanan Faaliyet/Fragment (düğmeleri ile birlikte)
    HorizontalListView mHList = (HorizontalListView) findViewById (R.id.hList); 
    Button bPrevoius = (Button) findViewById (R.id.btnPrevoius); 
    Button bNext = (Button) findViewById (R.id.btnNext); 
    
    • Düğmelere Tıklatma İzleyicileri ekleyin. HorizontalListView widget'ında önceden tanımlanmış scrollTo() işlevini kullanın. Kodda gördüğünüz gibi, kaydırmak için int dp değerini alır.Eğer sağa (bir sonraki) içinde kaydırmak istiyorsanız pozitif değerler ekleyin ve sol (önceki) içinde kaydırmak istiyorsanız negatif değerleri kullanın:

      bPrevoius.setOnClickListener(new OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           //value 500 is arbitrarily given. if you want to achieve 
           //element-by-element scroll you should get the width of the 
           //previous element dynamically or if the elements of the 
           //list have uniform width just put that value instead 
           mHList.scrollTo(-500); 
           //if it's the first/last element you can bPrevoius.setEnabled(false) 
      
          } 
      }); 
      
      
      bNext.setOnClickListener(new OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           mHList.scrollTo(500); 
      
          } 
      }); 
      

    SEÇENEK 2: Daha güncel çözümüne kadar Bu sorun Android L'de tanıtılan yeni widget RecyclerView olabilir (android eklenmesi: scrollbars = "vertical" hile yapardı; bunun dışında geleneksel ListView davranışı olmalıydı). Daha fazla bilgi için resmi belgeleri kontrol edin.

-1

titanyum Appcelerator olarak, tüm görüntülerin veya sahip herhangi bir içeriği bir döngü çalıştırın ve bu görünüme ekleyebilirsiniz,

var scrollableView = Ti.UI.createScrollableView({ 
      showPagingControl:true, 
      scrollingEnabled: true,  
      top: 360        
}); 

O zaman bu kullanarak scrollableView yapabilirsiniz. (Döngü) {
eval ("var view" + i + "= Ti.UI.createView();");

profile_image = Ti.UI.createImageView({ 
       image: result[0]['profile_image'], 
       left:15, 
       width:82, 
       height:104, 
       top: 0 
      }); 

eval("view"+i+".add(profile_image);"); 

eval("scrollableView.addView(view"+i+");"); 

}

mywin.add (scrollableView);

İlgili konular