大家好,我是 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>
活动调用:
启动
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;
}
}
我认为这是我这部分的所有代码,现在是问题:
我如何制作滚动,及时一张图像,以及如何在加载图像时显示加载指示器,就像我在 web 中所做的那样?
任何代码修复将不胜感激!
先感谢您...