2013-04-18 7 views
7

मैं Fragment के भीतर HorizontalScrollView का उपयोग कर रहा हूं। जब मैं HorizontalScrollView के भीतर आइटम स्क्रॉल करने के बजाय इस दृश्य को स्क्रॉल करता हूं तो पूरा टुकड़ा या तो बाएं या दाएं स्क्रॉल किया जाता है। अब मैंने लेआउट के दोनों किनारों पर बटन का उपयोग करने का विचार किया है। लेकिन किसी भी तरफ मेरे स्क्रॉल व्यू को स्क्रॉल करने का तरीका नहीं मिल सकता है।अपने पक्षों पर बटन क्लिक करके क्षैतिज स्क्रॉलव्यू स्क्रॉल करना

इस संबंध में किसी भी मदद की अत्यधिक सराहना की जाएगी।

संपादित

बाद

मेरी xml फ़ाइल है।

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<ImageButton 
    android:id="@+id/btn_left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:src="@drawable/left_arrow" /> 

<ImageButton 
    android:id="@+id/btn_right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:src="@drawable/right_arrow" /> 

<HorizontalScrollView 
    android:id="@+id/horizontal_scrollview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/btn_right" 
    android:layout_toRightOf="@id/btn_left" 
    android:fadeScrollbars="false" 
    android:padding="5dp" 
    android:scrollbarAlwaysDrawHorizontalTrack="true" 
    android:scrollbars="horizontal" > 

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

और मेरे जावा फ़ाइल

public class MyGallery extends Activity { 

private LinearLayout linearLayout; 

private ImageButton leftBtn; 
private ImageButton rightBtn; 
private HorizontalScrollView hsv; 
int currentScrollX = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.horizontalscrolling); 

    leftBtn = (ImageButton) findViewById(R.id.btn_left); 
    rightBtn = (ImageButton) findViewById(R.id.btn_right); 
    hsv = (HorizontalScrollView) findViewById(R.id.horizontal_scrollview); 
    linearLayout = (LinearLayout) findViewById(R.id.dynamic_generation); 

    leftBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
     } 
    }); 

    rightBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     } 
    }); 

    String[] users = new String[20]; 
    for (int i = 0; i < 20; i++) { 
     users[i] = "user " + (i + 1); 
    } 

    for (int i = 0; i < users.length; i++) { 
     final TextView userId = new TextView(MyGallery.this); 
     userId.setText(users[i]); 
     ImageView imageView = new ImageView(MyGallery.this); 
     linearLayout.addView(userId); 
     linearLayout.addView(imageView); 
     userId.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(MyGallery.this, 
         userId.getText() + " has been clicked!", 
         Toast.LENGTH_LONG).show(); 
       // hsv. 
      } 
     }); 
    } 
} 

} 

मैं क्या जरूरत है

जब मैं प्रेस बाईं या दाईं बटन स्क्रॉल देखने के किसी भी बाएं या दाएं क्रमशः के लिए स्क्रॉल करना होगा ।

+0

क्या आप अपना एक्सएमएल पोस्ट कर सकते हैं? – Catherine

+0

@ कैथरीन कृपया मेरे संपादित प्रश्न देखें। –

उत्तर

9

आप अपने मौजूदा हैंडलर के लिए निम्न कोड पंक्ति जोड़ते हैं, तो आपके विचार सही हर बटन क्लिक के साथ स्क्रॉल करेगा:

rightBtn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     hsv.scrollTo((int)hsv.getScrollX() + 10, (int)hsv.getScrollY()); 
    } 
}); 

आप इसे अधिक सुचारू रूप से स्क्रॉल करने के लिए चाहते हैं, तो आप एक onTouchListener बजाय उपयोग कर सकते हैं :

rightBtn.setOnTouchListener(new View.OnTouchListener() { 

    private Handler mHandler; 
    private long mInitialDelay = 300; 
    private long mRepeatDelay = 100; 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       if (mHandler != null) 
        return true; 
       mHandler = new Handler(); 
       mHandler.postDelayed(mAction, mInitialDelay); 
       break; 
      case MotionEvent.ACTION_UP: 
       if (mHandler == null) 
        return true; 
       mHandler.removeCallbacks(mAction); 
       mHandler = null; 
       break; 
     } 
     return false; 
    } 

    Runnable mAction = new Runnable() { 
     @Override 
     public void run() { 
      hsv.scrollTo((int) hsv.getScrollX() + 10, (int) hsv.getScrollY()); 
      mHandler.postDelayed(mAction, mRepeatDelay); 
     } 
    }; 
}); 

चिकनाई और प्रतिक्रिया आप चाहते हैं पाने के लिए अपनी पसंद के हिसाब से देरी वैरी।

+0

इसका मतलब क्या है? – Catherine

+0

आप बाईं ओर स्क्रॉल कैसे करेंगे ... बाएं स्थिति में स्थिति बदलने के रूप में मैं बाईं ओर स्क्रॉल करने में सक्षम नहीं हूं? – nitesh

+0

इसके अलावा hsv.getScrollX() केवल बाएं किनारे – nitesh

संबंधित मुद्दे