怎么才能做到长按图片切换到图库并改变图片?? 布局数据线程gridview 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 修改完后调用适配器的notifyDataSetChanged()刷新一下 闲来无事 给楼主写了个DEMO,希望对楼主有所帮助Activityimport android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.Toast;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;public class MainActivity extends Activity { private GridView gv; private final String IMAGE_TYPE = "image/*"; private BaseAdapter adapter; private String image_Path = "";// 图片路径 private Bitmap[] bmChose = new Bitmap[4];// 保存用户所选定的图片 private int flag;// 标记用户点击的GridView子项 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化 gv = (GridView) findViewById(R.id.gv); for (int i = 0; i < bmChose.length; i++) { bmChose[i] = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); } adapter = new BaseAdapter() { @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = getLayoutInflater(); ImageView iv = (ImageView) inflater.inflate( R.layout.imageview_item, null); convertView = iv; } ((ImageView) convertView).setImageBitmap(bmChose[position]); return convertView; } @Override public long getItemId(int position) { return 0; } @Override public Object getItem(int position) { return null; } @Override public int getCount() { return 4; } }; gv.setAdapter(adapter); gv.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { flag = position; // 使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, 0); return false; } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) {// 此处的 RESULT_OK 是系统自定义得一个常量 return; } // 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口 ContentResolver resolver = getContentResolver(); if (requestCode == 0) {// 此处的用于判断接收的Activity是不是你想要的那个 try { Uri originalUri = data.getData(); // 获得图片的uri // 获取图片的路径: String[] proj = { MediaStore.Images.Media.DATA }; // 好像是android多媒体数据库的封装接口,具体的看Android文档 Cursor cursor = managedQuery(originalUri, proj, null, null, null);// 此处为可能NULL if (cursor != null) { // 获得用户选择的图片的索引值 int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); // 将光标移至开头 ,这个很重要,不小心很容易引起越界 cursor.moveToFirst(); // 最后根据索引值获取图片路径 image_Path = cursor.getString(column_index); bmChose[flag] = MediaStore.Images.Media.getBitmap(resolver, originalUri); // 缩放图片 bmChose[flag] = Bitmap.createScaledBitmap(bmChose[flag], 200, 320, true); // 通知更新adapter adapter.notifyDataSetChanged(); } else { Toast.makeText(MainActivity.this, "你选择的图片已经被删除,请重新选择", 2000) .show(); } } catch (Exception e) { Log.d("2", e.toString()); } } } @Override protected void onDestroy() { super.onDestroy(); for (int i = 0; i < bmChose.length; i++) { if (bmChose[i] != null) { bmChose[i].recycle(); } } }}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" > <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:horizontalSpacing="1dp" android:numColumns="2" android:verticalSpacing="5dp" /></RelativeLayout><?xml version="1.0" encoding="utf-8"?><ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="120dp" ></ImageView> 谢谢,今天终于搞明白了.对item组件的数据改变时,必须把对应在数组中的位置也改变,然后在调用adpter的刷新方法 这些代码都是啥意思啊?求准确翻译。 如何在scrollview的顶部固定一个控件? Android 类似动态水纹壁纸的制作方法 播放器里垂直滑动换歌曲的效果如何实现 InflateException,哪位大神帮忙看下 怎么保证我随机绘制出的矩形,都在屏幕边框上呢 android UI问题 NDK中找不到mbstowcs? 安卓能不能实现图像处理? 使用dom4j解析xml 出现的异常,求大神解决! Android 不规则多边形ImageView布局问题,大神在哪里? 服务器端如何提取客户端POST的数据
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;public class MainActivity extends Activity {
private GridView gv;
private final String IMAGE_TYPE = "image/*";
private BaseAdapter adapter;
private String image_Path = "";// 图片路径
private Bitmap[] bmChose = new Bitmap[4];// 保存用户所选定的图片
private int flag;// 标记用户点击的GridView子项 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化
gv = (GridView) findViewById(R.id.gv);
for (int i = 0; i < bmChose.length; i++) {
bmChose[i] = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
}
adapter = new BaseAdapter() { @Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
ImageView iv = (ImageView) inflater.inflate(
R.layout.imageview_item, null);
convertView = iv;
}
((ImageView) convertView).setImageBitmap(bmChose[position]);
return convertView;
} @Override
public long getItemId(int position) { return 0;
} @Override
public Object getItem(int position) { return null;
} @Override
public int getCount() { return 4;
}
};
gv.setAdapter(adapter);
gv.setOnItemLongClickListener(new OnItemLongClickListener() { @Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
flag = position;
// 使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
getAlbum.setType(IMAGE_TYPE);
startActivityForResult(getAlbum, 0);
return false;
}
});
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {// 此处的 RESULT_OK 是系统自定义得一个常量
return;
}
// 外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口
ContentResolver resolver = getContentResolver();
if (requestCode == 0) {// 此处的用于判断接收的Activity是不是你想要的那个
try {
Uri originalUri = data.getData(); // 获得图片的uri
// 获取图片的路径:
String[] proj = { MediaStore.Images.Media.DATA };
// 好像是android多媒体数据库的封装接口,具体的看Android文档
Cursor cursor = managedQuery(originalUri, proj, null, null,
null);// 此处为可能NULL
if (cursor != null) {
// 获得用户选择的图片的索引值
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
// 将光标移至开头 ,这个很重要,不小心很容易引起越界
cursor.moveToFirst();
// 最后根据索引值获取图片路径
image_Path = cursor.getString(column_index);
bmChose[flag] = MediaStore.Images.Media.getBitmap(resolver,
originalUri);
// 缩放图片
bmChose[flag] = Bitmap.createScaledBitmap(bmChose[flag],
200, 320, true);
// 通知更新adapter
adapter.notifyDataSetChanged();
} else {
Toast.makeText(MainActivity.this, "你选择的图片已经被删除,请重新选择", 2000)
.show();
} } catch (Exception e) {
Log.d("2", e.toString());
}
}
} @Override
protected void onDestroy() {
super.onDestroy();
for (int i = 0; i < bmChose.length; i++) {
if (bmChose[i] != null) {
bmChose[i].recycle();
}
}
}}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" > <GridView
android:id="@+id/gv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:horizontalSpacing="1dp"
android:numColumns="2"
android:verticalSpacing="5dp" /></RelativeLayout><?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="120dp" ></ImageView>