Android 如何使用户将图像添加到可从系统中绘制?
我面临一个问题。我使用了一个图片网格视图,我创建了一个对象和所有的东西。我想让用户通过点击一个按钮,将一个图像添加到资源中,然后我甚至希望能够使用这个图像ID,这样我就可以将它添加到我的对象和gridview中 这是我的活动:(需要的部分)Android 如何使用户将图像添加到可从系统中绘制?,android,image,Android,Image,我面临一个问题。我使用了一个图片网格视图,我创建了一个对象和所有的东西。我想让用户通过点击一个按钮,将一个图像添加到资源中,然后我甚至希望能够使用这个图像ID,这样我就可以将它添加到我的对象和gridview中 这是我的活动:(需要的部分) 公共类ImageAdapter扩展了BaseAdapter{ 私有上下文; 公共图像适配器(上下文c){ mContext=c; } public int getCount(){ 返回mThumbIds.size(); } 公共对象getItem(int位置
公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
公共图像适配器(上下文c){
mContext=c;
}
public int getCount(){
返回mThumbIds.size();
}
公共对象getItem(int位置){
返回null;
}
公共长getItemId(int位置){
返回0;
}
//为适配器引用的每个项目创建新的ImageView
公共视图getView(int位置、视图转换视图、视图组父视图){
视图网格;
LayoutFlater充气器=(LayoutFlater)mContext
.getSystemService(上下文布局\充气机\服务);
if(convertView==null){
网格=新视图(mContext);
网格=充气机。充气(R.layout.grid_single,null);
ImageView ImageView=(ImageView)grid.findViewById(R.id.grid\u image);
TextView TextView=(TextView)grid.findViewById(R.id.grid\u text);
imageView.setScaleType(imageView.ScaleType.FIT_CENTER);
setText(mThumbIds.get(position.getDesc());
setImageResource(mThumbIds.get(position.getImageID());
}否则{
网格=(视图)转换视图;
}
返回网格;
}
}
public void createAll(){
SharedPreferences=PreferenceManager.getDefaultSharedPreferences(此);
parentGender=prefs.getString(“parentGender”,“1”);
parentNum=prefs.getString(“parentNum”,即“”);
childName=prefs.getString(“childName”、“Kiddo”);
最后一个字符串开头=parentsext+“,”+childName;
如果(mThumbIds.size()==0){
mThumbIds.add(电视);
mThumbIds.add(cookie);
添加(卫生间);
mThumbIds.add(玩具);
添加(食物);
添加(水);
}
final GridView GridView=(GridView)findviewbyd(R.id.grid);
setAdapter(新的ImageAdapter(this));
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、最终整型位置、长id){
废话废话…(从现在起,它就是点击项目的处理)
注意::mThumbIds
是我的对象的ArrayList E>
,它包含一个标题和一个图像ID
如何让用户添加图像并使用其id???如注释所述,您无法在运行时将任何图像保存到资源。您必须处理其他概念,如将图像路径中的图像存储在sqlite数据库中。因此,如果我是您,首先我将实现一个描述所有函数的模型类这是你想要的。 因此,第一步:创建一个模型类:
public class MyPicture{
String filePath, pictureId;
Bitmap thumbNail, pictureBmp;
} /// constructor , setters, getters etc
然后,我将实现一种方法,让用户从sd卡或MediaStore(换句话说)中选择图片
// first open an activity to browse the pictures from MediaStore and return the result with code CODE.
public void browsePictures(){
Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(i, CODE);
}
您可以查看startActivityForResult方法的更多信息
然后接收结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE && resultCode == RESULT_OK && null != data) { // we have bitmap from filesystem!
Uri selectedImage = data.getData();
InputStream inputStream = null;
if (ContentResolver.SCHEME_CONTENT.equals(selectedImage.getScheme())) {
try {
inputStream = this.getContentResolver().openInputStream(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
if (ContentResolver.SCHEME_FILE.equals(selectedImage.getScheme())) {
try {
inputStream = new FileInputStream(selectedImage.getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// here you have to store the data that you received. In other words ,
// create the MyPicture object and then store it to your sqlite db.
}
}
有关onActivityResult方法的更多信息,请查看。
正如您在文档页面中所看到的,startActivityForResult和onActivityResult是一对必须一起使用的方法。变量“CODE”是帮助我们区分onActivityResult方法中收到的多个结果的变量
有许多教程介绍如何设置sqlite数据库。
您可以在运行时查看,用户不能将图像添加到
资源
。他们只能使用来自资源的图像。@NguyenDoanTung,我可以使用该资源的id吗?谢谢!但我不理解browsePicture方法。这是我按钮的onClick方法吗?符号代码代表什么?@karvoynistasI编辑了我的答案。请看一看。另外,关于onclick方法,如果你想在单击后浏览图片,答案是肯定的。我的应用程序在我单击此按钮时崩溃。我需要任何权限吗?是的,你必须添加安卓.permission.READ\u外部存储
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE && resultCode == RESULT_OK && null != data) { // we have bitmap from filesystem!
Uri selectedImage = data.getData();
InputStream inputStream = null;
if (ContentResolver.SCHEME_CONTENT.equals(selectedImage.getScheme())) {
try {
inputStream = this.getContentResolver().openInputStream(selectedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
if (ContentResolver.SCHEME_FILE.equals(selectedImage.getScheme())) {
try {
inputStream = new FileInputStream(selectedImage.getPath());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
// here you have to store the data that you received. In other words ,
// create the MyPicture object and then store it to your sqlite db.
}
}