从blob转换为位图并在listView中使用的数组

时间:2016-01-11 15:47:45

标签: android arrays listview bitmap

我想将图片保存到sqlLite并阅读并显示在listview中 保存工作正常(使用blob
例如,保存后我的图片为R.drawable.icon我有byte[]
我以这种方式使用它

Bitmap bm = BitmapFactory.decodeByteArray(img, 0, img.length);
holder.img.setImageBitmap(bm);

它工作正常,但我的列表视图现在工作缓慢。
我试图像这样设置(使用图像而不是数组)

holder.img.setImageResource(R.drawable.icon);

这很好...... 因此,当我使用bitmaps时,它会变慢...任何想法如何向imageView显示数组?

通知我android:largeHeap="true"

1 个答案:

答案 0 :(得分:0)

它运行缓慢,因为每次图像变得可见时,bytearray都会被解码。这会消耗记忆和时间。当您将图像设置为此 'Separate out Product Names Dim sProd() As String = {} Dim sInst() As String = {} Dim sProdList() As String = {"Auto", "Chequing", "GIC", "Mutual Funds", "Real Estate", "RIF", "RSP", "Savings", "Shares", "Stock", "TFSA", "CCard", "Guar", "Loan", "Loc", "Mortgage"} sProd = objNode.InnerText.Split(",") objNode = Nothing objNode = objXMl.SelectSingleNode("//Inst") sInst = objNode.InnerText.Split(",") Dim instPos As Integer = 0 For Each st As String In sProdList If Array.Exists(sProd, Function(x As String) sProdList.Contains(x)) Then If sInst(instPos) = "PCCU" Then img = My.Resources.check ElseIf sInst(instPos) <> "PCCU" OrElse sInst(instPos) = "" Then img = My.Resources.exclamation Else img = My.Resources.redX End If dt.Rows.Add(New Object() {st, imageToByteArray(img)}) instPos += 1 End If Next dgProduct.DataSource = dt 时,它只会从您的可绘制文件夹中加载不占用内存的图像。你应该尝试创建一个新的线程(可能使用AsyncTask)在后台加载你的图像。这样,您可以滚动列表,并在滚动时将图像加载到后台。