大家好我是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;
}
}
我认为这是我对这部分的所有代码,
现在的问题是:
如何制作卷轴,及时制作一张图片,以及如何在加载图片时如何在网页上显示加载指示器?
任何代码修复都将受到高度赞赏!
提前谢谢你......
答案 0 :(得分:0)
在自定义图库中
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
-->> super.onFling(e1, e2, 20, velocityY); <<--
return false;
}
尝试修改第3个参数。
答案 1 :(得分:0)
而不是在你的xml中声明Gallery。
Gallery gallery = new CustomGaller(getActivity());
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
params.addRule(RelativeLayout.RIGHT_OF, R.id.left);
params.addRule(RelativeLayout.LEFT_OF,R.id.right);
gallery.setLayoutParams(params);
gallery.setAdapter(new GalleryAdapter(<Pass values>));
您不必将View ID传递给Custom Gallery。