GridView一些属性介绍

android:numColumns="auto_fit" --------每行多少个,这个是自动
android:columnWidth="20dp",----------每列的宽度,也就是Item的宽度
android:stretchMode="columnWidth"------缩放与列宽大小同步
android:verticalSpacing="10dp"----------垂直边距
android:horizontalSpacing="10dp"-------水平边距

思路:

1,在xml文件中定义了一个Button,和一个GridView

2,在MainActivity中的Button点击事件里,点击启动线程,通过Bitmap进行分割。

3,分割完成后通过GridView添加到适配器BaseAdapter里

4,通过消息机制Handler更新UI

5,实现GridView监听方法setOnItemClickListener.实现删除

代码xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity" >    <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:onClick="sendBitmap"        android:text="点击切割图片" />    <GridView         android:id="@+id/main_gview"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="50dp"         android:verticalSpacing="3dp"         android:horizontalSpacing="3dp"         android:numColumns="4"        />   </RelativeLayout> <span style="color:#ff0000;font-weight: bold; ">    </span>
MainActivity中代码

package com.example.bitmap;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;public class MainActivity extends Activity implements OnItemClickListener {private GridView gv;// 定义集合装填图片,数据源private List<Bitmap> list;// 适配器private GridViewAdapter adapter;private Handler handle = new Handler() {public void handleMessage(Message msg) {if (msg.what == 1) {// 显示gv.setAdapter(adapter);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始话GritViewgv = (GridView) findViewById(R.id.main_gview);// 调用适配器删除gv.setOnItemClickListener(this);}// 将图片分割并显示到页面上public void sendBitmap(View v) {new Thread() {public void run() {//声明集合装填图片,数据源list = new ArrayList<Bitmap>();//获取图片Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.mm);// 定义切割的宽和高int xwidth = 5;int yheight = 5;// 每份的长度 = 总长度/切割的长度int xbm = bm.getWidth() / xwidth;int ybm = bm.getHeight() / yheight;// 循环遍历for (int i = 0; i < xwidth; i++) {for (int j = 0; j < yheight; j++) {// 切割。异常原因,宽度必须小于图片的宽度// java.lang.IllegalArgumentException: x + width must be// <= bitmap.width()// 需要切割的图片资源、切割起始点的X坐标、切割起始点的Y坐标、切割多宽、切割多高。Bitmap newbm = Bitmap.createBitmap(bm, j * xbm,i * ybm, xbm, ybm);list.add(newbm);// 核心代码完毕,传参数传bm,切割高和宽}}adapter = new GridViewAdapter(list, MainActivity.this);handle.sendEmptyMessage(1);}}.start();}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {// 删除list.remove(list.get(position));//更新adapter.notifyDataSetChanged();}}<span style="color:#ff0000;font-weight: bold; "></span>
BaseAdapter适配器里

package com.example.bitmap;import java.util.List;import android.graphics.Bitmap;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;public class GridViewAdapter extends BaseAdapter {private List<Bitmap> datas;private MainActivity mat;public GridViewAdapter(List<Bitmap> datas, MainActivity mat) {this.datas = datas;this.mat = mat;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn datas.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn datas.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View v;ViewHolder vh;if (convertView==null) {v = mat.getLayoutInflater().inflate(R.layout.gview_main, null);vh = new ViewHolder();vh.iv = (ImageView) v.findViewById(R.id.gview_iv);v.setTag(vh);}else{v = convertView;vh = (ViewHolder) v.getTag();}//这里显示的是Bitmapvh.iv.setImageBitmap(datas.get(position));return v;}static class ViewHolder{ImageView iv;}}<span style="color:#ff0000;font-weight: bold; "></span>
子布局的xml文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <ImageView         android:id="@+id/gview_iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"                /></RelativeLayout><strong></strong>

更多相关文章

  1. Android有效解决加载大图片时内存溢出的问题
  2. Android 图片加载图片_OOM异常解决
  3. android实现服务器图片本地缓存
  4. android listview继承BaseAdapter,自定义的适配器,getView方法执
  5. Android SeekBar自定义使用图片和颜色显示
  6. RecyclerView item imageview 图片宽高自适应
  7. Android 微信分享,微信分享图片

随机推荐

  1. PHP用于解析JSON并添加到数据库mysql
  2. 通过PHP设置html属性的最佳做法是什么?
  3. 以编程方式编写CSS背景的最佳方法?
  4. 安装nginx并配置php环境
  5. 在Yii中获取当前控制器和操作ID
  6. 基于PHP聊天室的编程思想
  7. 检查PHP是否启用了JavaScript
  8. php计算几分钟前、几小时前、几天前的几
  9. jQuery ajax调用不会调用我的php页面
  10. 复制到剪贴板没有瑞士法郎。只使用javasc