【问题标题】:Load Bitmap Image From SDCard To ListView Android将位图图像从 SDCard 加载到 ListView Android
【发布时间】:2012-12-04 07:20:09
【问题描述】:

我正在尝试将位图图像从 sdcard 加载到 listview,但 imageview 没有显示图像。

这是我从 SDCard 获取图像的代码:

public static Bitmap getArtwork(Context context, int album_id) {

        ContentResolver res = context.getContentResolver();
        Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
        if (uri != null)
        {
            InputStream in = null;
            try 
            {
                in = res.openInputStream(uri);
                return BitmapFactory.decodeStream(in, null, sBitmapOptions);
            } catch (FileNotFoundException ex) 
            {
                // The album art thumbnail does not actually exist. Maybe the user deleted it, or
                // maybe it never existed to begin with.
            } finally
            {
                    if (in != null)
                    {
                        try {
                            in.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
             }
        return null;
    }

在列表视图中显示图像和文本的代码:

public class AlbumList extends ListActivity{

    public final ArrayList<HashMap<String, Object>> songsList = new ArrayList<HashMap<String, Object>>();
    public final ArrayList<HashMap<String, Object>> songsListData = new ArrayList<HashMap<String, Object>>();
    private Context context; 
    ListAdapter adapter;
    private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
    private static final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");

    //Context contentResolver;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        context = this;

    final String[] cursor_cols = { MediaStore.Audio.Media._ID,
                    MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,
                    MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DATA,
                    MediaStore.Audio.Media.ALBUM_ID,
                    MediaStore.Audio.Media.DURATION };
              Cursor cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cursor_cols, null, null, null);
              if (cursor == null) 
              {
                  //Query Failed , Handle error.
              }
              else if (!cursor.moveToFirst()) 
              {
                 //No media on the device.
              }
              else
              {   
                  int albumName = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
                  int id = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);

                  for(int i=0;i<cursor.getCount();i++)
                  {
                            String Name = cursor.getString(albumName);
                            Integer albumid = cursor.getInt(id);                        

                            Bitmap bitmap = null;
                            bitmap = getArtwork(context, albumid);
                            if(bitmap == null)
                            {
                                bitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.icon);
                            }
    //                      ImageView iv = (ImageView) findViewById(R.id.list_image);
    //                      iv.setImageBitmap(bitmap);
                            HashMap<String, Object> song = new HashMap<String, Object>();
                            song.put("albumArt", bitmap);
                            song.put("albumName", Name);  
                            // Adding each song to SongList
                            songsList.add(song); 
                            cursor.moveToNext();
                   }
               }
               cursor.close(); 

                // looping through playlist
                for (int i = 0; i < songsList.size(); i++) {
                    // creating new HashMap
                    HashMap<String, Object> song = songsList.get(i);
                    // adding HashList to ArrayList
                    songsListData.add(song);
                }

                // Adding menuItems to ListView
                 String[] from = {"albumArt" , "albumName" };
                 int[] to={R.id.list_image , R.id.albumName};
                 adapter = new SimpleAdapter(this, songsListData,R.layout.list_item, from, to);
                 setListAdapter(adapter);
}

我尝试在适用于相同代码的 imageview 中显示单个图像。但是对于 listview 我没有得到图像。所以我该怎么做?? 请给我一些解决方案。 谢谢。

【问题讨论】:

  • 我不确定您在哪里应用位图,或者用于什么目的。但是在列表视图中,您可以将背景设置为位图。 Imageview 可以设置背景或源,但最好设置为 ImageView 源以获得更多显示选项。基本上做 ListView lv = (ListView)findViewById(r.id...); lv.setbackground 类似的东西
  • 我想用图像和文本显示列表视图。意味着在 xml 中我有 imageview 和 textview。

标签: android android-listview android-arrayadapter android-mediaplayer mediastore


【解决方案1】:

ListView 会夸大你告诉他们的内容。您应该制作一个 xml 布局并将其命名为 list_item,在这里按照您想要的方式排列 ImageView 和 Textview。确保将 Containing 布局的高度设置为包裹内容。

现在,当您在列表视图中扩充视图时,请改为扩充您制作的此项目。然后将这个膨胀布局中的 textview 和 imageview 设置为你想要的。

例如,在您的 listview 适配器中执行类似的操作。

@Override
  public View getView(int position, View convertView, ViewGroup parent) {

 if(convertView==null){
   convertView = li.inflatelayout(R.layout.list_item);

    }
    MyListItemModel item = items.get(position);
     // replace those R.ids by the ones inside your custom list_item layout.
     TextView label = (TextView)convertView.findViewById(R.id.item_textview);
     label.setText(text);
     ImageView iv= (Imageview)convertView.findViewById(R.id.item_imageview);
    iv.setsourceimage(bitmap);

    return convertView;
}

如果你愿意,你也可以在这里设置他们的 onclick 监听器。

【讨论】:

  • @WIIIJBD, iv.setsourceimage(bitmap) 获取错误。函数不存在。
  • iv.setbitmapimage(bitmap),就是这样的。
【解决方案2】:

您可以使用LazyList Project 实现您的要求。

这与here 提出的问题相同 希望这可能会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多