gpt4 book ai didi

android - 如何在 Android 中的 GridView 内的 imageView 上设置布局参数

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:17 25 4
gpt4 key购买 nike

我是 android 的新手,我在 the official android site 上遇到了这个教程。关于如何创建图像的 GridView。我使用 kotlin 作为首选语言。在扩展 BaseAdapter 的适配器类中,我试图按照教程中的指示设置 ImageView 布局参数,但我收到一条错误消息,指出 GridView.LayoutParams 是未解析的引用。这是该类的完整代码:

class ImageAdapter(val context: Context) : BaseAdapter() {
// references to our images
val items: IntArray = intArrayOf(R.drawable.cat, R.drawable.daft_punk, R.drawable.gun, R.drawable.harvestors, R.drawable.intel, R.drawable.maserati, R.drawable.porsche, R.drawable.serveroom, R.drawable.spiderman, R.drawable.watch_dog)
override fun getItem(p0: Int): Any {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}

override fun getItemId(p0: Int): Long {
return 0
}

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

// create a new ImageView for each item referenced by the Adapter
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
var imageView: ImageView
if (p1 == null) {
// if it's not recycled, initialize some attributes
imageView= ImageView(context)
imageView.layoutParams= GridView.LayoutParams(85,85)
imageView.scaleType = ImageView.ScaleType.CENTER_CROP
imageView.setPadding(8, 8, 8, 8)
} else {
imageView=p1 as ImageView
}
imageView.setImageResource(items[p0])
return imageView
}

}

错误出在 getView 方法中的 imageView.layoutParams=GridView.LayoutParams(85,85) 行。 LayoutParams 为红色,表示错误,当我将鼠标悬停在其上时,我收到消息:

Unresolved reference: LayoutParams

如何成功设置这些LayoutParams?因为没有它们,GridView 中的图像将以全高显示,我需要一个小图像,就像图库应用在我们的手机中显示它们一样。

后续问题:

当我将 imageView.layoutParams=GridView.LayoutParams(85,85) 替换为 imageView.layoutParams=AbsListView.LayoutParams(85,85) 时,我得到了一个javaOutOfMemory 错误。以下是完整的堆栈跟踪:

08-16 06:58:11.412 4543-4543/gallerie.classmite.com.imageviewer E/dalvikvm-heap: Out of memory on a 18662416-byte allocation.
08-16 06:58:11.431 4543-4543/gallerie.classmite.com.imageviewer E/AndroidRuntime: FATAL EXCEPTION: main

Process: gallerie.classmite.com.imageviewer, PID: 4543 java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
at android.content.res.Resources.loadDrawable(Resources.java:2166)
at android.content.res.Resources.getDrawable(Resources.java:710)
at android.widget.ImageView.resolveUri(ImageView.java:638)
at android.widget.ImageView.setImageResource(ImageView.java:367)
at gallerie.classmite.com.imageviewer.ImageAdapter.getView(ImageAdapter.kt:32)
at android.widget.AbsListView.obtainView(AbsListView.java:2372)
at android.widget.GridView.makeAndAddView(GridView.java:1345)
at android.widget.GridView.makeRow(GridView.java:345)
at android.widget.GridView.fillDown(GridView.java:287)
at android.widget.GridView.fillFromTop(GridView.java:421)
at android.widget.GridView.layoutChildren(GridView.java:1233)
at android.widget.AbsListView.onLayout(AbsListView.java:2166)
at android.view.View.layout(View.java:15127)
at android.view.ViewGroup.layout(ViewGroup.java:4862)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
at android.view.View.layout(View.java:15127)
at android.view.ViewGroup.layout(ViewGroup.java:4862)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
at android.view.View.layout(View.java:15127)
at android.view.ViewGroup.layout(ViewGroup.java:4862)
at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
at android.view.View.layout(View.java:15127)
at android.view.ViewGroup.layout(ViewGroup.java:4862)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
at android.view.View.layout(View.java:15127)
at android.view.ViewGroup.layout(ViewGroup.java:4862)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2315)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2021)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1189)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6221)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
at android.view.Choreographer.doCallbacks(Choreographer.java:591)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:5315)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)
at dalvik.system.NativeStart.main(Native Method)

仅当我在手机上运行该应用程序时出现此错误,但当我在模拟器中运行该应用程序时,在我进行上述替换后它可以正常运行。

最佳答案

你可以试试这个:

imageView.layoutParams = AbsListView.LayoutParams(85, 85)

AbsListView.LayoutParamsGridView 中用于检索 child 的 LayoutParams

由于静态成员可以被子类继承in Java .当你调用GridView.LayoutParams时,它实际上是AbsListView.LayoutParams。但是,在 Kotlin 中,您不能以同样的方式进行。在子类之外,只能使用父类(super class)的名称来引用父类(super class)的伴生对象的成员。

后续问题的更新:

OutOfMemory 错误表示您正在将大图像加载到 ImageView。为了防止这种情况,您必须在显示之前缩小图像,引用这个 tutorial .你也可以使用一些图像加载框架,例如 Glide , 以显示您的图像。

推荐阅读:Strange out of memory issue while loading an image to a Bitmap object

关于android - 如何在 Android 中的 GridView 内的 imageView 上设置布局参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45703751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com