2013-08-29 33 views
2

我想實現交錯網格視圖庫。我使用類似於正常的GridView實現這樣的方法:Android交錯gridview實現

package com.example.abcd8; 

import com.origamilabs.library.views.StaggeredGridView; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.GridView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     StaggeredGridView sg1=(StaggeredGridView)findViewById(R.id.staggeredGridView1); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

和適配器是這個

package com.example.abcd8; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 

    private Context ctx; 

    public ImageAdapter(Context c) 
    { 
     ctx=c; 
    } 
    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return pics.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ImageView iv; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      iv = new ImageView(ctx); 
      iv.setLayoutParams(new GridView.LayoutParams(150,150)); 
      iv.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      iv.setPadding(8, 8, 8, 8); 
     } else { 
      iv = (ImageView) convertView; 
     } 
     iv.setImageResource(pics[position]); 
     return iv; 

    } 

    private Integer[] pics={ 
      R.drawable.sample_0,R.drawable.sample_1, 
      R.drawable.sample_2,R.drawable.sample_3, 
      R.drawable.sample_4,R.drawable.sample_5, 
      R.drawable.sample_6,R.drawable.sample_7 
    }; 
    } 

和XML代碼是這樣

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:staggered="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/mainLayout"> 

    <com.origamilabs.library.views.StaggeredGridView 
     android:id="@+id/staggeredGridView1" 
     staggered:numColumns="2" 
     staggered:drawSelectorOnTop="true" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

但是,這並不工作作爲我認爲我們需要在這裏使用staggeredadapter來添加圖像。我不確定如何在這種情況下使用它,以及如何將它添加到我的代碼中。 請幫我在這裏 感謝

回答

0

首先,你應該添加YOUT適配器連接到StaggeredGridView這樣

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    StaggeredGridView sg1=(StaggeredGridView)findViewById(R.id.staggeredGridView1); 

    ArrayList<String> urls = new ArrayList<String>(); 
    ... 
    urls.add("http://mypic.com/thispic"); 
    ... 
    MyAdapter adapter = new MyAdapter(urls); 
    sg1.setAdapter(adapter); 

} 

我覺得it's重要的是說,在最新版本StaggeredGridView的方法serAdapter正在等待ListAdapter,你正在擴大BaseAdapter這是它

http://developer.android.com/reference/android/widget/ListAdapter.html

01子類

也許與它無關,但以防萬一。

希望它有幫助。

祝你好運!