2010-09-20 7 views
6

Tôi mới sử dụng Android và tôi muốn tạo một thư viện hình ảnh trong đó mỗi cột là một danh mục và người dùng có thể cuộn cả theo chiều dọc và chiều ngang.Cách tạo thư viện hình ảnh 2 chiều với cả cuộn ngang và dọc?

Tôi đã tìm thấy bài đăng hữu ích về cách hiển thị danh sách hình ảnh here. Tôi tự hỏi liệu có thể lồng danh sách hình ảnh bên trong chế độ xem thư viện không?

Trả lời

0

Bạn có thể cần GridView. GridView là một ViewGroup hiển thị các mục trong một lưới có thể cuộn hai chiều. Các mục lưới được tự động chèn vào layout bằng cách sử dụng ListAdapter.

+2

Tôi cố gắng đó nhưng có vẻ như GridView không hỗ trợ cuộn ngang: http: //stackoverflow.com/questions/ 2997818/gridview-with-horizontal-scroll –

7

Đặt thư viện vào GridView với một cột và kích thước cột được đặt để lấp đầy chế độ xem gốc (hoặc cái gì đó có hiệu lực). Đặt một thư viện vào GridView và thiết lập chiều cao của nó trong LayoutParams đến chiều cao của các drawables/views bạn muốn chiếm chúng. Tất cả những gì bạn cần làm là khi một thư viện được di chuyển để di chuyển tất cả các thư viện khác trong chế độ xem lưới. Tôi sẽ đăng mã dưới đây. Lưu ý: mã tôi đã làm là một thử nghiệm về khái niệm hoạt động, tôi vừa thử nó trên điện thoại của mình. Như vậy tuy nhiên, nó không phải là hào nhoáng. Khi tôi tiếp tục làm việc trên nó Tôi có thể cập nhật mã để làm cho nó trông đẹp hơn.

~ Aedon :)

public class Test extends Activity { 
    /** Called when the activity is first created. */ 
    GridView gv; 
    Gallery g[] = new Gallery[3]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     gv = (GridView) findViewById(R.id.gridview); 
     gv.setAdapter(new GAdapter()); 
     for (int i = 0; i < g.length; i++) { 
      g[i] = new Gallery(this); 
      g[i].setAdapter(new GGAdapter()); 
      g[i].setOnTouchListener(new OnTouchListener() { 
       @Override 
       public boolean onTouch(View arg0, MotionEvent ev) { 
        if (ev.getAction() == MotionEvent.ACTION_UP) { 
         for (int j = 0; j < g.length; j++) { 
          g[j].setSelection(((AdapterView) arg0) 
            .getSelectedItemPosition()); 
         } 
        } 
        return false; 
       } 
      }); 
     } 
    } 

    private class GAdapter extends BaseAdapter { 
     public GAdapter() { 
     } 

     @Override 
     public int getCount() { 
      return g.length; 
     } 

     @Override 
     public Object getItem(int pos) { 
      return pos; 
     } 

     @Override 
     public long getItemId(int pos) { 
      return pos; 
     } 

     @Override 
     public View getView(final int pos, View convertView, ViewGroup parent) { 

      g[pos].setLayoutParams(new GridView.LayoutParams(gv.getWidth(), gv 
        .getHeight())); 
      return g[pos]; 
     } 
    } 

    private class GGAdapter extends BaseAdapter { 
     int[] images = new int[] { R.drawable.icon, R.drawable.icon, 
       R.drawable.icon }; 

     public GGAdapter() { 
     } 

     @Override 
     public int getCount() { 
      return images.length; 
     } 

     @Override 
     public Object getItem(int pos) { 
      return pos; 
     } 

     @Override 
     public long getItemId(int pos) { 
      return pos; 
     } 

     @Override 
     public View getView(final int pos, View convertView, ViewGroup parent) { 
      ImageView mIV = new ImageView(Test.this); 
      mIV.setBackgroundResource(images[pos]); 
      mIV.setLayoutParams(new Gallery.LayoutParams(gv.getWidth(), gv 
        .getHeight()/3)); 
      return mIV; 
     } 
    } 
} 

và file xml của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center" 
     android:horizontalSpacing="10dp" 
     android:numColumns="1" 
     android:verticalSpacing="10dp" /> 

</LinearLayout> 
+0

Điều này trông giống như một câu trả lời tuyệt vời, nhưng nó hoàn toàn không đọc được vì thiếu định dạng trên mã. Đảm bảo thụt lề mã của bạn bằng 4 dấu cách để Stack Overflow hiển thị mã đó dưới dạng mã. Chắc chắn là một câu trả lời đẹp khi bạn làm điều đó! –

+0

Câu trả lời hay. Bạn tiết kiệm rất nhiều thời gian. – Smeet