Я хочу быстро разбить 10 различных изображений, когда я перетаскиваю палец на экран. Изображения сохраняются в SD-карте. Я использую этот код для отображения изображений на экране, но изменение происходит слишком медленно.
public class ImageActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image);
File images = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File[] imagelist = images.listFiles(new FilenameFilter(){
public boolean accept(File dir, String name) {
return ((name.endsWith(".jpg"))||(name.endsWith(".png")));
}
});
mFiles = new String[imagelist.length];
for(int i= 0 ; i< imagelist.length; i++) {
mFiles[i] = imagelist[i].toString();
}
getImageFromSDCard();
}
public void getImageFromSDCard() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
try {
if(mFilePosition < mFiles.length) {
Log.d("", mFiles[mFilePosition]);
Bitmap b = BitmapFactory.decodeFile(mFiles[mFilePosition], null);
image.setImageBitmap(b);
mFilePosition = 0;
}
} catch (Exception e) {
//Log error
}
b = null;
System.gc();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
getImageFromSDCard();
}
}}
В основном я пытаюсь сделать что-то вроде анимации. Итак, как сделать загрузку изображений быстрее?
Вы можете дождаться завершения загрузки и отобразить только изображения на изображении. Для этого удалите оператор image.setImageBitmap(b); из цикла for и создать массивList растровых изображений для хранения изображений. Таким образом, вы можете гарантировать, что изображения загружены до того, как вы хотите их отображать.
попробуйте следующее:
public class Pics extends Activity {
private ImageView image;
private String[] mFiles;
private int mFilePosition = 0;
private ArrayList<Bitmap> bitArray;
private Bitmap b;
private int i;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
image = (ImageView) findViewById(R.id.image);
bitArray = new ArrayList<Bitmap>();
File images = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
try {
images.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.e("file path", images.getAbsolutePath());
File[] imagelist = images.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return ((name.endsWith(".jpg")) || (name.endsWith(".png")));
}
});
mFiles = new String[imagelist.length];
Log.e("size", imagelist.length + "");
for (int i = 0; i < imagelist.length; i++) {
mFiles[i] = imagelist[i].toString();
}
getImageFromSDCard();
}
public void getImageFromSDCard() {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
try {
for (int j = 0; j < mFiles.length; j++) {
Log.d("", mFiles[mFilePosition]);
b = BitmapFactory.decodeFile(mFiles[j], null);
bitArray.add(b);
}
} catch (Exception e) {
// Log error
}
b = null;
System.gc();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
MathHelper.showToast(getApplicationContext(), bitArray.size() + "");
for (i = 0; i < bitArray.size()-1; i++) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() { // TODO Auto-generated method stub
image.setImageBitmap(bitArray.get(i));
}
}, 1000);
}
}
return true;
}
}
bitmap exceeds VM budget
? я получаю сообщение об ошибке, когда в каталоге более 3 изображений