Android的GridView控制項用於把一系列的空間組織成一個二維的網格顯示出來
應用的比較多的就是組合圖片顯示
下面我就詳細講一個例子
首先寫一個類繼承BaseAdapter
public class ImageList extends BaseAdapter {</p><p> public Bitmap[] image;<br />Activity activity;</p><p>// construct<br />public ImageList(Activity a) {<br />activity = a;<br />}<br />@Override<br />public int getCount() {<br />// TODO Auto-generated method stub<br />return image.length;<br />}<br />@Override<br />public Object getItem(int position) {<br />// TODO Auto-generated method stub<br />return image[position];<br />}<br />@Override<br />public long getItemId(int position) {<br />// TODO Auto-generated method stub<br />return position;<br />}<br />public View getView(int position, View convertView, ViewGroup parent) {<br />// TODO Auto-generated method stub<br />ImageView imageView;<br />if (convertView == null) {<br />imageView = new ImageView(activity);<br />imageView.setLayoutParams(new GridView.LayoutParams(50, 50));// 設定ImageView寬高<br />imageView.setAdjustViewBounds(false);<br />imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);</p><p>} else {<br />imageView = (ImageView) convertView;<br />}<br />imageView.setImageBitmap(image[position]);</p><p>return imageView;<br />}<br />public static Bitmap drawableToBitmap(Drawable drawable) { </p><p> Bitmap bitmap = Bitmap<br /> .createBitmap(<br /> drawable.getIntrinsicWidth(),<br /> drawable.getIntrinsicHeight(),<br /> drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888<br /> : Bitmap.Config.RGB_565);<br /> Canvas canvas = new Canvas(bitmap);<br /> drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());<br /> drawable.draw(canvas);<br /> return bitmap;<br />}<br />}<br />
然後在主程式裡
final GridView gv = (GridView) findViewById(R.id.grid);<br />ImageList adapter = new ImageList(available.this);<br />Resources res=getResources();<br />Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.logo);<br />adapter.image=new Bitmap[20];<br />for(int i=0;i<=19;i++)<br />{<br />adapter.image[i]=bmp;<br />}<br />gv.setAdapter(adapter);<br />gv.setOnItemClickListener(new OnItemClickListener() {<br />@Override<br />public void onItemClick(AdapterView<?> arg0, View arg1,<br />int arg2, long arg3) {<br />// TODO Auto-generated method stub<br />Log.i("phb", arg2 + "");<br />Log.i("phbsel",gv.isFocused()+"");<br />Intent i=new Intent(available.this, com.mobile.links.shop.mycx.shopcart.class);<br /> startActivity(i);<br />}<br />});<br /> gv.setOnItemSelectedListener(new OnItemSelectedListener(){<br />@Override<br />public void onItemSelected(AdapterView<?> arg0, View arg1,<br />int arg2, long arg3) {<br />// TODO Auto-generated method stub<br />Log.i("selected",arg2+"");<br />tv.setText(arg2+":detail");<br />}<br />@Override<br />public void onNothingSelected(AdapterView<?> arg0) {<br />// TODO Auto-generated method stub</p><p>}</p><p> });<br />
其中onClick函數是判斷被點擊
而onSelect函數是判斷被選中 也就是獲得焦點的imageview
這樣我們就可以基於gridview來做一些應用了。
構建gridview的xml代碼
<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout<br />android:id="@+id/relativelayout"<br />android:layout_width="fill_parent"<br />android:layout_height="fill_parent"<br />xmlns:android="http://schemas.android.com/apk/res/android"<br />android:orientation="vertical"<br />><br /><GridView android:id="@+id/availgrid"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:numColumns="4"<br /> android:verticalSpacing="30dp"<br /> android:layout_centerHorizontal = "true"</p><p> /> </p><p></LinearLayout><br />