Здравствуйте, ребята, я новичок в Android, так что будьте осторожны со мной:),
У меня есть галерея, мне нужно загрузить изображения, у меня их много, производительность при загрузке изображений я решил с помощью AsyncTask.
Теперь у меня проблема с прокруткой галереи, она пропускает изображения и выглядит не очень хорошо.
Теперь я попытался реализовать свою собственную галерею, но безуспешно, простоне будет работатьтеперь у меня есть еще один вопрос:
final ScrollableGallery galleryView = (ScrollableGallery)findViewById(R.id.gallery); //always returns null
, можете ли вы объяснить, почему, пожалуйста?
Вот код:
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Gallery;
public class ScrollableGallery extends Gallery {
public ScrollableGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ScrollableGallery(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollableGallery(Context context) {
super(context);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// limit the max speed in either direction
if (velocityX > 1200.0f) {
velocityX = 1200.0f;
} else if (velocityX < 1200.0f) {
velocityX = -1200.0f;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
XML-часть:
<ScrollableGallery
android:id="@+id/gallery"
android:layout_width="675dp"
android:layout_height="492dp"
android:layout_marginLeft="62dp"
android:layout_marginTop="225dp"
android:scaleType="fitXY" >
</ScrollableGallery>
Actvity Invocation:Посвящение
final ScrollableGallery galleryView = (ScrollableGallery)findViewById(R.id.gallery);
Запуск адаптера:
galleryV.setAdapter(new BaseAdapter() {
public int getCount() {
return _imageList.size();
}
public Object getItem(int position) {
return _imageList.get(position);
}
public long getItemId(int position) {
_position = position;
return position;
}
public View getView(final int position, View convertView,final ViewGroup parent) {
if (convertView == null) {
convertView = new ImageView(Database.this);
}
ImageDispatcher dispatch = new ImageDispatcher(((ImageView) convertView));
dispatch.execute(_imageList.get(position));
((ImageView) convertView).setScaleType(ImageView.ScaleType.FIT_XY);
((ImageView) convertView).setLayoutParams(new ScrollableGallery.LayoutParams(675, 492));
return convertView;
}
});
<br/>
The image dispatcher:
import java.lang.ref.WeakReference;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.widget.ImageView;
public class ImageDispatcher extends AsyncTask<String, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
public ImageDispatcher(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
@Override
// Actual download method, run in the task thread
protected Bitmap doInBackground(String... params) {
return ShrinkBitmap(params[0], 300 ,300);
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (isCancelled()) {
bitmap = null;
}
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
/*********************************************************
* PRIVATE METHODS
*********************************************************/
@SuppressWarnings("unused")
private Bitmap ShrinkBitmap(String file, int width, int height) {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inTempStorage = new byte[16 * 1024];
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight / (float) height);
int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth / (float) width);
bmpFactoryOptions.inSampleSize = heightRatio > 1 || widthRatio > 1 ? heightRatio : widthRatio;
bmpFactoryOptions.inJustDecodeBounds = false;
bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
return bitmap;
}
@SuppressWarnings("unused")
private Bitmap ShrinkBitmap(String file) {
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inTempStorage = new byte[16 * 1024];
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bMap = BitmapFactory.decodeFile(file);
Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap,150, 100, true);
return bMapScaled;
}
}
Я думаю, что это весь код, который у меня есть для этой части, теперь вопрос:Как мне сделать прокрутку, одно изображение за раз, и как я показываю индикатор загрузки, как я делаю в Интернете, когда я загружаю изображения ???
Любое исправление кода будет высоко оценено!
Заранее спасибо ...