android中九宫图整齐排列(图片处理)

 在编程的时候使用girdview发现一个问题,就是如果你放的图片不是等大小的吧,就会出现乱七八糟的排列,可能出现下面效果(宽度是好的,可是高度设置不了)。

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" 

    android:background="@drawable/gridviewbackground">

    

    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">

这里解释下各属性的含义:

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);//放drawableid,而我们现在要放的是返回来的缩放图片,没有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> dataList = new ArrayList>();

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 map = new HashMap();

// map.put("icon", image[i]);drawableid

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);

}

}

有什么更好的建议可以提出来,大家分享一下!


你可能感兴趣的:(Android)