Поскольку GalleryView
устарел, мы должны иммигрировать в некоторые альтернативные виджеты, в моем случае ViewFlipper
- лучший, но я столкнулся с несколькими проблемами, как вы можете видеть на следующем скриншоте. Я разработал карусель ImageGallery
сGalleryView
:
С ViewFlipper
все работает, как я ожидал, но я не могу реализовать две вещи:
1- ViewFlipper
всегда показывает один элемент;однако мне нужно отобразить три элемента (или даже больше) одновременно.
2- ViewFlipper
- это не сенсорный виджет, и это не то, что я хочу!
Как FlávioFaria упомянул о ViewPager
в следующем посте, это тоже отличный случай, но я не могу передать ему свою анимацию масштабирования!
Я сделал все с помощью ViewPager
, теперь он работает отлично, но я пропустил одну функцию, и это прокрутка бесконечности!
Добавил мойPagerAdapter
класс
public class CarouselAdapter extends PagerAdapter
{
private Context mContext;
private ImageLoader imageLoader;
private String[] bannerUri;
public CarouselAdapter (Context c, String[] bannerArray)
{
this.mContext = c;
this.bannerUri = bannerArray;
// Setup image loader
this.imageLoader = ImageLoader.getInstance();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(c)
.threadPoolSize(2)
.memoryCache(new WeakMemoryCache())
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.build();
this.imageLoader.init(config);
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
if (position >= bannerUri.length)
position %= bannerUri.length;
ImageView i = new ImageView(mContext);
displayImage(i, bannerUri[position]);
i.setScaleType(ScaleType.FIT_XY);
container.addView(i);
return i;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
container.removeView((View)object);
}
@Override
public int getCount()
{
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object)
{
return (view == object);
}
private void displayImage(final ImageView mImage, String ImageUri)
{
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.border)
.showImageForEmptyUri(R.drawable.border)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.resetViewBeforeLoading()
.cacheOnDisc()
.displayer(new FadeInBitmapDisplayer(740))
.build();
imageLoader.loadImage(ImageUri, defaultOptions, new SimpleImageLoadingListener()
{
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage)
{
mImage.setImageDrawable(new BitmapDrawable(mContext.getResources()
, getDesiredBitmap(loadedImage, 12)));
}
});
}
private Bitmap getDesiredBitmap(Bitmap originalImage, int roundValue)
{
// Create required bitmaps
Bitmap shadowBitmap = BitmapFactory.decodeResource(mContext.getResources()
, R.drawable.samsungapps_thumb_shadow);
Bitmap outputBitmap = Bitmap.createBitmap(originalImage.getWidth()
, originalImage.getHeight() + 80, Bitmap.Config.ARGB_8888);
// Create canvas and pass bitmap to it
Canvas mCanvas = new Canvas(outputBitmap);
// And finally draw the shaodw
mCanvas.drawBitmap(Bitmap.createScaledBitmap(shadowBitmap, originalImage.getWidth()
, (int)(shadowBitmap.getHeight() / 2.3), false), 0, originalImage.getHeight(), null);
mCanvas.drawBitmap(originalImage, 0, 0, null);
return outputBitmap;
}
}
Есть идеи о том, как выполнить эти две вещи?