嗯......我有一个有很多图像的应用程序。这些图像存储在SD卡中。我通过SQL请求检索它们。
因此,例如,他是一个典型的SQL:
SELECT * FROM `table`
WHERE
tags like
'%verb%'
上面的代码将返回所有带有“动词”标记的图像。这导致84张图像。
然后,我循环将这些图像插入带有名称,标签等的列表中。以下是代码:
if (cursorImagens.getCount() > 0) {
telaScroll.removeAllViews();
lTodasImagens.removeAllViews();
for (int i = 0; (i < cursorImagens.getCount()) ; i++) {
TextView textoNome;
TextView textoTags;
LinearLayout linha;
linha = (LinearLayout) LayoutInflater.from(getBaseContext()).inflate(R.layout.imgsinternas, lTodasImagens, false);
final ImageButton figuraBotao;
figuraBotao = (ImageButton) linha.findViewById(R.id.figura);
figuraBotao.setImageDrawable(Drawable.createFromPath(PATH + cursorImagens.getString(4) + ".png"));
final Uri uriImagem = Uri.parse(PATH + cursorImagens.getString(4) + ".png");
textoNome = (TextView) linha.findViewById(R.id.txtNome);
textoTags = (TextView) linha.findViewById(R.id.txtTags);
textoNome.setText(cursorImagens.getString(4));
textoTags.setText(cursorImagens.getString(3));
figuraBotao.setOnTouchListener(new Button.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent arg1) {
if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN){
currImageURI = uriImagem;
imgItem.setImageURI(uriImagem);
}
return false;
}
});
lTodasImagens.addView(linha);
View linhaHorizontal;
linhaHorizontal = LayoutInflater.from(getBaseContext()).inflate(R.layout.linhahorizontalstyle, lTodasImagens, false);
lTodasImagens.addView(linhaHorizontal);
cursorImagens.moveToNext();
}
telaScroll.addView(lTodasImagens);
}
当我使用“verb”上面的参数运行此代码时,它会检索84个寄存器并获得FC。
你们建议我做什么?
感谢任何帮助!
答案 0 :(得分:0)
最好保存sdcard中的所有图像。然后在数据库中创建一个表并在该TABLE中存储所有图像路径。如果要显示图像,则从字符串路径创建位图并设置为图像。设置回收后该位图(到垃圾收集)。
由于在数据库中将图像保存为blob非常痛苦且耗时。建议如果您将更多图像保存到SD卡中并保存到TABLE
的路径。
您将获得许多关于保存和显示来自sdard
的图像的教程答案 1 :(得分:0)
如果您的图片太大,则必须先将它们缩小,然后再将它们设置为Drawable。尝试使用
BitmapFactory.decodeStream(InputStream is, Rect outPadding, Options opts)
有一个适当的opts.inSampleSize
(例如,2会将你的图像缩小到一半),然后像这样创建你的drawable:
BitmapDrawable drawable = new BitmapDrawable(yourBitmap);