注意:这种实现方法不是实现ListView的最优方法,只是希望通过练习了解ListView的实现原理

思维路线:

1.创建drawable文件夹将要使用的图片导入进去

2.写一个类,用于存放图片ID数据和内容文本。

3.写一个自定义布局,给ListView的每一个行的格式做范本。

4.创建一个类并且继承ArrayAdapter适配器,并且重写适配器自带的getView方法。

5.创建一个ListView的activity。

6.在ListView的activity里,创建list集合导入数据,将导入数据的list添加到ArrayAdapter适配器中,将适配好的内容放到ListView控件中。

1.创建drawable文件夹将要使用的图片导入进去:

创建好文件夹后将图片复制到新的文件夹里。

2.写一个类,用于存放图片ID数据和内容文本:

  1. package com.example.prize.mylistviewdemoapp;
  2. /**
  3. * Created by prize on 2018/4/11.
  4. */
  5. public class ImageListArray {
  6. private String name;
  7. private int imageId;
  8. public ImageListArray(String name, int imageId){
  9. this.name = name;
  10. this.imageId = imageId;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public int getImageId() {
  16. return imageId;
  17. }
  18. }

3.写一个自定义布局,给ListView的每一个行的格式做范本:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="wrap_content"
  5. android:layout_height="wrap_content"
  6. android:padding="15dp">
  7. <ImageView
  8. android:id="@+id/IamgeView_List"
  9. android:layout_width="100dp"
  10. android:layout_height="100dp"
  11. android:background="#FFFFFF"/>
  12. <TextView
  13. android:id="@+id/TextView_List"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:text="内容"
  17. android:textSize="30sp"
  18. android:layout_marginLeft="15dp"
  19. android:layout_marginTop="30dp"/>
  20. </LinearLayout>

4.创建一个类并且继承ArrayAdapter适配器,并且重写适配器自带的getView方法:

  1. package com.example.prize.mylistviewdemoapp;
  2. import android.content.Context;
  3. import android.support.annotation.LayoutRes;
  4. import android.support.annotation.NonNull;
  5. import android.support.annotation.Nullable;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.ImageView;
  11. import android.widget.TextView;
  12. import java.util.List;
  13. /**
  14. * Created by prize on 2018/4/11.
  15. */
  16. public class ImageListAdapter extends ArrayAdapter<ImageListArray> {
  17. private int recourceId;
  18. /*
  19. ImageListAdapter( Context context, int resource, List<ImageListArray> objects)解析
  20. Context context :当前类或者当前类的Context上下文
  21. int resource :ListView的一行布局,它将会导入到适配器中与数据自动适配
  22. List<ImageListArray> objects :数据的List集合
  23. */
  24. public ImageListAdapter( Context context, int resource, List<ImageListArray> objects) {
  25. super(context, resource, objects);
  26. recourceId = resource;
  27. }
  28. @NonNull
  29. @Override
  30. /*
  31. 为什么要重写getView?因为适配器中其实自带一个返回布局的方法,
  32. 这个方法可以是自定义适配一行的布局显示,因为我们需要更复杂的布局内容,
  33. 所以我们直接重写它,,不需要在导入一个简单的TextView或者ImageView布局让适配器在写入布局数据。
  34. 所以在recourceId自定义布局id直接导入到getView里面,getView方法不在convertView中获取布局了。
  35. 最后只要返回一个view布局就可以。
  36. */
  37. public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
  38. ImageListArray imageListArray = getItem(position); //得到集合中指定位置的一组数据,并且实例化
  39. View view = LayoutInflater.from(getContext()).inflate(recourceId,parent,false); //用布局裁剪器(又叫布局膨胀器),将导入的布局裁剪并且放入到当前布局中
  40. ImageView imageView = (ImageView)view.findViewById(R.id.IamgeView_List);//从裁剪好的布局里获取ImageView布局ID
  41. TextView textView = (TextView)view.findViewById(R.id.TextView_List); //从裁剪好的布局里获取TextView布局Id
  42. imageView.setImageResource(imageListArray.getImageId());//将当前一组imageListArray类中的图片iamgeId导入到ImageView布局中
  43. textView.setText(imageListArray.getName());//将当前一组imageListArray类中的TextView内容导入到TextView布局中
  44. return view;
  45. }
  46. }

5.创建一个ListView的activity,并且添加数据类,适配器,导入ListView 最终实现 列表视图

ListView活动的布局:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. tools:context="com.example.prize.mylistviewdemoapp.ImageListActivity">
  8. <ListView
  9. android:id="@+id/ImageListView"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"></ListView>
  12. </LinearLayout>

在ListView的activity里,创建list集合导入数据,将导入数据的list添加到ArrayAdapter适配器中,将适配好的内容放到ListView控件中。

  1. package com.example.prize.mylistviewdemoapp;
  2. import android.support.v7.app.AppCompatActivity;
  3. import android.os.Bundle;
  4. import android.widget.ListView;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. public class ImageListActivity extends AppCompatActivity {
  8. private List<ImageListArray> onePieceList = new ArrayList<>();
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_image_list);
  13. addingData(); //初始化数据
  14. //创建适配器,在适配器中导入数据 1.当前类 2.list_view一行的布局 3.数据集合
  15. ImageListAdapter imageListAdapter = new ImageListAdapter(ImageListActivity.this,R.layout.image_list_view,onePieceList);
  16. ListView listView = (ListView)findViewById(R.id.ImageListView); //将适配器导入Listview
  17. listView.setAdapter(imageListAdapter);
  18. }
  19. /*
  20. 导入数据
  21. */
  22. public void addingData(){
  23. ImageListArray ace =new ImageListArray("ace",R.drawable.ace);
  24. onePieceList.add(ace);
  25. ImageListArray arlong =new ImageListArray("arlong",R.drawable.arlong);
  26. onePieceList.add(arlong);
  27. ImageListArray barbe_blanche =new ImageListArray("barbe_blanche",R.drawable.barbe_blanche);
  28. onePieceList.add(barbe_blanche);
  29. ImageListArray baroque_works =new ImageListArray("baroque_works",R.drawable.baroque_works);
  30. onePieceList.add(baroque_works);
  31. ImageListArray brook =new ImageListArray("brook",R.drawable.brook);
  32. onePieceList.add(brook);
  33. ImageListArray buggy =new ImageListArray("buggy",R.drawable.buggy);
  34. onePieceList.add(buggy);
  35. ImageListArray chopper =new ImageListArray("chopper",R.drawable.chopper);
  36. onePieceList.add(chopper);
  37. ImageListArray franck =new ImageListArray("franck",R.drawable.franck);
  38. onePieceList.add(franck);
  39. ImageListArray hommes_poissons =new ImageListArray("hommes_poissons",R.drawable.hommes_poissons);
  40. onePieceList.add(hommes_poissons);
  41. ImageListArray luffys_flag =new ImageListArray("luffys_flag",R.drawable.luffys_flag);
  42. onePieceList.add(luffys_flag);
  43. ImageListArray luffys_flag_2 =new ImageListArray("luffys_flag_2",R.drawable.luffys_flag_2);
  44. onePieceList.add(luffys_flag_2);
  45. ImageListArray nami =new ImageListArray("nami",R.drawable.nami);
  46. onePieceList.add(nami);
  47. ImageListArray nico =new ImageListArray("nico",R.drawable.nico);
  48. onePieceList.add(nico);
  49. ImageListArray sanji =new ImageListArray("sanji",R.drawable.sanji);
  50. onePieceList.add(sanji);
  51. ImageListArray shanks =new ImageListArray("shanks",R.drawable.shanks);
  52. onePieceList.add(shanks);
  53. ImageListArray ussop =new ImageListArray("ussop",R.drawable.ussop);
  54. onePieceList.add(ussop);
  55. ImageListArray vente_esclaves =new ImageListArray("vente_esclaves",R.drawable.vente_esclaves);
  56. onePieceList.add(vente_esclaves);
  57. ImageListArray vivi =new ImageListArray("vivi",R.drawable.vivi);
  58. onePieceList.add(vivi);
  59. ImageListArray zoro =new ImageListArray("zoro",R.drawable.zoro);
  60. onePieceList.add(zoro);
  61. }
  62. }

最终效果:

android 开发 实现一个带图片Image的ListView的更多相关文章

  1. android开发 两张bitmap图片合成一张图片

    场景:对android4.4解码gif(解码文章见前面一篇)后的图片进行每帧处理,android4.3 解码出来的每帧都很完整,但是到android4.4版本就不完整了,每帧都是在第一帧的基础上把被改 ...

  2. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

  3. android开发之——获取相册图片和路径

    Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题. 比如:managed ...

  4. 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)

    转载出处:http://www.nowcoder.com/discuss/3244?type=2&order=0&pos=1&page=1 和大多数的面经不同,我不是大牛,手头 ...

  5. 在Android开发中替换资源图片不起作用的解决方法

    现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是 ...

  6. Android 自己写一个打开图片的Activity

    根据记忆中eoe的Intent相关视频,模仿,写一个打开图片的Activity 1.在主Activity的button时间中,通过设置action.category.data打开一个图片.这时代码已经 ...

  7. android 开发 实现一个进入相机拍照后裁剪图片或者进入相册选中裁剪图片的功能

    实现思维路径: 以进入相机拍照的思维路线为例子: 1.进入app 2.判断之前是否保存头像,如果有就显示历史图像 (下面代码中在getOldAvatar();方法中执行这个逻辑) 3.点击更换图像的B ...

  8. Android开发三种第三方图片加载的框架

    最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...

  9. android 开发 实现一个app的引导页面,使用ViewPager组件(此引导的最后一页的Button会直接写在最后一页布局里,跟随布局滑进滑出)

    基本ViewPager组件使用方式与我之前写的https://blog.csdn.net/qq_37217804/article/details/80332634 这篇博客一致. 下面我们将重点详细解 ...

随机推荐

  1. Hadoop Mapreduce 案例 wordcount+统计手机流量使用情况

    mapreduce设计思想 概念:它是一个分布式并行计算的应用框架它提供相应简单的api模型,我们只需按照这些模型规则编写程序,即可实现"分布式并行计算"的功能. 案例一:word ...

  2. pyhanlp 文本聚类详细介绍

    文本聚类 文本聚类简单点的来说就是将文本视作一个样本,在其上面进行聚类操作.但是与我们机器学习中常用的聚类操作不同之处在于. 我们的聚类对象不是直接的文本本身,而是文本提取出来的特征.因此如何提取特征 ...

  3. c++中无名命名空间的使用

    1. 命名空间作用 命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开. 通俗的说,每个名字空间都是一个名字空 ...

  4. 一个基于netty的websocket聊天demo

    这里,仅仅是一个demo,模拟客户基于浏览器咨询卖家问题的场景,但是,这里的demo中,卖家不是人,是基于netty的程序(我就叫你uglyRobot吧),自动回复了客户问的问题. 项目特点如下: 1 ...

  5. LeetCode——15. 3Sum

    一.题目链接:https://leetcode.com/problems/3sum/ 二.题目大意: 3和问题是一个比较经典的问题,它可以看做是由2和问题(见http://www.cnblogs.co ...

  6. STL基础--算法(已排序数据的算法,数值算法)

    已排序数据的算法 Binary search, merge, set operations 每个已排序数据算法都有一个同名的更一般的形式 vector vec = {8,9,9,9,45,87,90} ...

  7. Flume的基本概念

    Flume 概念 Flume 最早是Cludera提供的日志收集系统,后贡献给Apache.所以目前是Apache下的项目,Flume支持在日志系统中指定各类数据发送方,用于收集数据. Flume 是 ...

  8. SQL删除指定列的指定长度的字符

    update );

  9. Kong网关介绍与安装小记

    本文主要为kong安装小记,系统环境为centos 6.7                                本文转载请注明出处 —— xiaoEight 介绍 Kong 是在客户端和(微 ...

  10. 使用SHOW binlog events查看binlog内容

    用mysqlbinlog命令行查看binlog,觉得比较麻烦,突然发现原来mysql有个命令可以直接查看. SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] ...