Как сделать приложение более отзывчивым, использующим несколько растровых изображений?
Я новичок в Android, поэтому я не понимаю, как сделать приложение более отзывчивым, поскольку оно создает растровые изображения для каждой обработки и устанавливает для imageView. В основном я пытаюсь создать растровое изображение, поиграть с ним, как передача значений из seekBar, чтобы изменить его свойства и установить его в imageView. Как создать копию объекта растрового изображения, чтобы избежать ссылок. Любые предложения?? заранее спасибо
2 ответа
Вы можете попробовать эту библиотеку, которая очень эффективно обрабатывает растровые изображения.
https://github.com/thest1/LazyList Очень легко использовать эту библиотеку ленивых списков. Это делает работу кэширования растрового изображения автоматически:-
ImageLoader imageLoader=new ImageLoader(context);
imageLoader.DisplayImage(url, imageView);
НОТА:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
а также вы можете заглянуть в Nostras ImageLoader, так как он эффективно обрабатывает загрузку изображений в контейнеры определенного размера, то есть изменяет их размеры и сжимает, прежде чем вам понадобится обрабатывать их. Он также поддерживает контент Uris, который поможет вам всем сразу.
Кроме того, не стоит загружать изображение 1024x768 пикселей в память, если оно в конечном итоге будет отображаться в виде эскиза 128x96 пикселей в ImageView. Вы должны загрузить уменьшенную версию изображения в память. Я также делюсь замечательным утилитарным классом для растрового изображения, который поможет вам уменьшить изображение в соответствии с размером:-
BitmapUtil.java
/**
* Provides static functions to decode bitmaps at the optimal size
*/
public class BitmapUtil {
private BitmapUtil() {}
/**
* Returns Width or Height of the picture, depending on which size is smaller. Doesn't actually
* decode the picture, so it is pretty efficient to run.
*/
public static int getSmallerExtentFromBytes(byte[] bytes) {
final BitmapFactory.Options options = new BitmapFactory.Options();
// don't actually decode the picture, just return its bounds
options.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
// test what the best sample size is
return Math.min(options.outWidth, options.outHeight);
}
/**
* Finds the optimal sampleSize for loading the picture
* @param originalSmallerExtent Width or height of the picture, whichever is smaller
* @param targetExtent Width or height of the target view, whichever is bigger.
*
* If either one of the parameters is 0 or smaller, no sampling is applied
*/
public static int findOptimalSampleSize(int originalSmallerExtent, int targetExtent) {
// If we don't know sizes, we can't do sampling.
if (targetExtent < 1) return 1;
if (originalSmallerExtent < 1) return 1;
// test what the best sample size is
int extent = originalSmallerExtent;
int sampleSize = 1;
while ((extent >> 1) >= targetExtent) {
sampleSize <<= 1;
extent >>= 1;
}
return sampleSize;
}
/**
* Decodes the bitmap with the given sample size
*/
public static Bitmap decodeBitmapFromBytes(byte[] bytes, int sampleSize) {
final BitmapFactory.Options options;
if (sampleSize <= 1) {
options = null;
} else {
options = new BitmapFactory.Options();
options.inSampleSize = sampleSize;
}
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
}
}
Также Вы можете перейти по этой ссылке. Это поможет вам построить приложение.
http://developer.android.com/training/displaying-bitmaps/index.html
Используйте классы Lazy loading и Image loader в android, чтобы установить изображение на imageView, чтобы оно выглядело более отзывчивым.