【问题标题】:Lag after setImageDrawable在 setImageDrawable 之后滞后
【发布时间】:2016-03-05 00:14:22
【问题描述】:
我的代码有问题。关键是我有 16 张图像,当最初加载时,我的 Scrolling 活动没有滞后问题,但在几个 setimageas 之后变得非常慢。我希望你能帮助我。 ps:16张图片加载在一个片段上,当我从一个片段移动到“另一个滚动浏览”时会出现延迟问题。
【问题讨论】:
标签:
java
android
android-fragments
imageview
【解决方案1】:
我建议你使用 Picaso 库来加载图像,因为它非常快速和高效
就这么简单
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
更多信息我建议你去Picaso documentation
【解决方案2】:
【讨论】:
-
另一个库是Picasso,无论哪种情况,您的手机都可能使用大量内存来加载图像。上述两个库都处理得很好
【解决方案3】:
这是代码,那么如果通过xml src加载图像没有延迟,只需使用setImageDrawable延迟出来..
for(int h=0;h<16;h++){
final int finalH = h;
button[h].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
for (int i = 0; i < 8; i++) {
if (tresy[i] == ((int) button[finalH].getTag())) {
return true;
}
}
if ((test)&&(tempo)) {
Log.d("id", String.valueOf(button[finalH].getTag()));
button[finalH].setImageDrawable(carte[((int) button[finalH].getTag())]);
//set image resource tag!
logTaG[0] = (int) button[finalH].getTag();
logBtn = finalH;
test = false;
} else if(tempo) {
test = true;
button[finalH].setImageDrawable(carte[((int) button[finalH].getTag())]);
//set image resource tag!
logTaG[1] = (int) button[finalH].getTag();
if ((logTaG[0] == logTaG[1] && (logBtn != finalH))) {
tresy[j] = logTaG[0];
Intent intent = new Intent(v.getContext(), Browser_descrizione.class);
intent.putExtra("Tag", tresy[j]);
startActivity(intent);
j++;
Log.d("bravo", "hai vinto");
if (j == 7) {
Log.d("Bravo", "hai completato il gioco");
//Far comparire warning con scritto ricomincia o esci
attempt++;
SM.sendData(attempt);
}
} else {
Log.d("Riprova", "sarai più fortunato");
final Handler handler = new Handler();
tempo = false;
handler.postDelayed(new Runnable() {
@Override
public void run() {
// Do something after 5s = 5000ms
button[finalH].setImageResource(R.drawable.back_card);
button[logBtn].setImageResource(R.drawable.back_card);
tempo = true;
}
}, 500);
attempt++;
SM.sendData(attempt);
}
}
return true;
}
return false;
}
});
}