【问题标题】:show folder content in gridview在gridview中显示文件夹内容
【发布时间】:2018-07-01 12:42:25
【问题描述】:

所以我在外部存储中有一个特定的文件夹,我想将该文件夹中的所有 .jpg 图片显示到 gridview 中,我正在关注这个 tutorial,这很好,但是当我从 res/drawable 获取图片时需要从 sd 卡中获取它们,我阅读了有关此问题的所有示例和教程,但其中大部分都太旧且不适用于 kotlin,感谢任何帮助

【问题讨论】:

  • 你可以获得任何可用的 Java 代码并在 Kotlin 中进行转换
  • 没用我已经试过了

标签: android gridview kotlin


【解决方案1】:

正如Here 所记录的,您可以像这样以字节数组形式读取文件

fun main(args: Array<String>) {
    val file = File("input"+File.separator+"image.jpg")
    var bytes:ByteArray = file.readBytes()
    for(byte in bytes){
        print(byte.toChar())
    }
}

然后使用 BitmapFactory 类 API,您可以像这样将其转换为位图

Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

希望对你有所帮助。

【讨论】:

  • 您面临的问题是什么?
  • 当我需要从 sdcard 加载它时,gridview 从 res/drawable 加载图像,我无法应用你的答案来做到这一点
【解决方案2】:

经过几天的工作,我制作了一个工作代码

对于我使用的主要布局:

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>

在图像视图中显示图像的另一种布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<ImageView
    android:id="@+id/imageV"
    android:layout_width="100dp"
    android:layout_height="100dp"
    app:srcCompat="@mipmap/ic_launcher" />

这里是主要活动:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
//getting folder path
var gpath: String = Environment.getExternalStorageDirectory().absolutePath
var spath = "specificFolderName"
var path = File(gpath + File.separator + spath)
//getting all images from that path
var list = imageReader(path)

//get gridview from resources
var gv = findViewById<GridView>(R.id.gridview)
//set gridview adapter from ImageA class 
gv.adapter = ImageA(this, list)


        }
fun imageReader(root: File): ArrayList<File> {

    val fileList: ArrayList<File> = ArrayList()
    val listAllFiles = root.listFiles()

    if (listAllFiles != null && listAllFiles.size > 0) {
        for (currentFile in listAllFiles) {
            if (currentFile.name.endsWith(".jpg")) {
                fileList.add(currentFile.absoluteFile)
            }
        }
    }
    return fileList
}
}

这是适配器类:

class ImageA (c: Context, list: ArrayList<File>) : BaseAdapter() {
var list:ArrayList<File> = list
private var mcontext: Context? = c
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {


    var convertV = LayoutInflater.from(mcontext).inflate(R.layout.single_grid, 
parent, false)
    var iv = convertV.findViewById<ImageView>(R.id.imageV)
    var bitmap = MediaStore.Images.Media.getBitmap(mcontext?.contentResolver, 
Uri.fromFile(list[position]))
    iv.setImageBitmap(bitmap)
    return convertV

}

override fun getItem(position: Int): Any {
    return list[position]
}

override fun getItemId(position: Int): Long {
    return position.toLong()
}

override fun getCount(): Int {
    return list.size
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 2021-05-15
    • 2012-03-22
    • 2017-05-17
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多