在编程的时候使用girdview发现一个问题,就是如果你放的图片不是等大小的吧,就会出现乱七八糟的排列,可能出现下面效果(宽度是好的,可是高度设置不了)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/gridviewbackground">
<GridView android:id="@+id/gridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchMode="columnWidth"
android:gravity="center"
android:numColumns="auto_fit"
android:columnWidth="90dp"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"></GridView>
</LinearLayout>
这里解释下各属性的含义:
android:stretchMode="columnWidth"缩放模式 缩放与列宽大小同步
android:gravity="center"放置位置 居中
android:numColumns="auto_fit" 列数 自动与以后自己放的元素有关
android:columnWidth="90dp"设置宽度大小
android:verticalSpacing="1dp"竖直间宽
android:horizontalSpacing="1dp"水平间宽
其他的就不说了,学过android的都懂
这可怎么办呢?呵呵。。。我们可以将图片进行缩放处理,统一大小,而不是直接定死尺寸让图片显示不全,这样效果不是很好哦。
图片缩放代码如下:
// 缩放图片
package com.dianxin.test;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.dianxin.test.db.CommUtil;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class GridviewShowActivity extends Activity {
private GridView gridView;
private int numColumns = 4;
String appTitle[] = new String[] { "省公司OA", "电信内部微博", "掌上看数" }; public static Bitmap resizeImage(Bitmap bitmap, int w, int h) {
String appTitle[] = new String[] { "省公司OA", "电信内部微博", "掌上看数" };
// load the origial Bitmap
Bitmap BitmapOrg = bitmap;
int width = BitmapOrg.getWidth();
int height = BitmapOrg.getHeight();
int newWidth = w;
int newHeight = h;
// 计算缩放率,新尺寸除原始尺寸
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// 创建操作图片用的matrix对象
Matrix matrix = new Matrix();
// 缩放图片动作
matrix.postScale(scaleWidth, scaleHeight);
// 旋转图片 动作
// matrix.postRotate(45);
//倒角
matrix.mapRadius(15);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,
height, matrix, true);
// make a Drawable from Bitmap to allow to set the Bitmap
// to the ImageView, ImageButton or what ever
return resizedBitmap;
}
那我们就得到了图片,但是如果要放进gridview里面要用到SimpleAdapter类,用过的大家都知道要填充数据,
map.put("icon", R.drawable.gkdebconf);//放drawable的id,而我们现在要放的是返回来的缩放图片,没有id咋办呢,呵呵。。。。。这样得不到我们要的效果哦。
这也很简单,只需将adapter设置一下就行。这种在放实现视频缩略图岁的时候填充listView也可以用的,因为这是一个道理。
adapter.setViewBinder(new ViewBinder() {
// 原来放的是R.drawble.、、、现在直接放图片
public boolean setViewValue(View view, Object data,
String textRepresentation)
{
if (view instanceof ImageView && data instanceof Bitmap)
//判断是否为Bitmap,是的话直接放图片
{
ImageView iv = (ImageView) view;
iv.setImageBitmap((Bitmap) data);
return true;
}
//不是的话,默认使用系统的根据R.id.XXX来放图片
else
return false;
}
});
关键步骤上面都写好了,以下是参考代码:
package com.dianxin.test;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.dianxin.test.db.CommUtil;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class GridviewShowActivity extends Activity {
private GridView gridView;
private int numColumns = 4;//girdView列数
String appTitle[] = new String[] { "省公司OA", "电信内部微博", "掌上看数" };
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview_main);
gridView = (GridView) findViewById(R.id.gridView);
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
int image[] = new int[] { R.drawable.picture_1, R.drawable.weibo,
R.drawable.zhangshangkanshu1, R.drawable.gkdebconf };
Bitmap[] bitmaps = new Bitmap[numColumns];
for (int i = 0; i < numColumns; i++)
{
bitmaps[i] = BitmapFactory.decodeResource(getResources(), image[i]);
bitmaps[i] = CommUtil.resizeImage(bitmaps[i], 120, 120);
Map<String, Object> map = new HashMap<String, Object>();
// map.put("icon", image[i]);放drawable的id
map.put("icon", bitmaps[i]);// 放图片要重写setViewBinder方法
if (i == numColumns - 1)// 最后一个为设置按钮
{
map.put("appTitle", "系统设置");
}
else
{
map.put("appTitle", appTitle[i]);
}
dataList.add(map);
}
SimpleAdapter adapter = new SimpleAdapter(this, dataList,
R.layout.gridview_item, new String[] { "icon", "appTitle" },
new int[] { R.id.ivShowIocn, R.id.tvShowText });
gridView.setAdapter(adapter);
adapter.setViewBinder(new ViewBinder() {
// 原来放的是R.drawble.XXX,现在直接放图片
public boolean setViewValue(View view, Object data,
String textRepresentation)
{
if (view instanceof ImageView && data instanceof Bitmap)
{
ImageView iv = (ImageView) view;
iv.setImageBitmap((Bitmap) data);
return true;
}
else
return false;
}
});
gridView.setOnItemClickListener(ItemClickHanlder);
}
}
有什么更好的建议可以提出来,大家分享一下!