Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用户将图像添加到可从系统中绘制?_Android_Image - Fatal编程技术网

Android 如何使用户将图像添加到可从系统中绘制?

Android 如何使用户将图像添加到可从系统中绘制?,android,image,Android,Image,我面临一个问题。我使用了一个图片网格视图,我创建了一个对象和所有的东西。我想让用户通过点击一个按钮,将一个图像添加到资源中,然后我甚至希望能够使用这个图像ID,这样我就可以将它添加到我的对象和gridview中 这是我的活动:(需要的部分) 公共类ImageAdapter扩展了BaseAdapter{ 私有上下文; 公共图像适配器(上下文c){ mContext=c; } public int getCount(){ 返回mThumbIds.size(); } 公共对象getItem(int位置

我面临一个问题。我使用了一个图片网格视图,我创建了一个对象和所有的东西。我想让用户通过点击一个按钮,将一个图像添加到资源中,然后我甚至希望能够使用这个图像ID,这样我就可以将它添加到我的对象和gridview中

这是我的活动:(需要的部分)

公共类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.
    }

}