Android编程实现的超炫图片浏览器

2019-12-10 19:43:25王冬梅

代码到这里就结束了。有兴趣的话可以自行调整里面的参数来实现更多更炫的效果。
下面是调用的示例:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_gallery); 
    Integer[] images = { R.drawable.img0001, R.drawable.img0030, 
      R.drawable.img0100, R.drawable.img0130, R.drawable.img0200, 
      R.drawable.img0230, R.drawable.img0300, R.drawable.img0330, 
      R.drawable.img0354 }; 
    ImageAdapter adapter =new ImageAdapter(this, images); 
    adapter.createReflectedImages(); 
    GalleryFlow galleryFlow = (GalleryFlow) findViewById(R.id.gallery_flow); 
    galleryFlow.setAdapter(adapter); 
}

PS1:

可以看出来这样实现的gallery锯齿问题比较严重。可以在createReflectedImages()使用以下代码:

BitmapDrawable bd = new BitmapDrawable(bitmapWithReflection);
bd.setAntiAlias(true);

然后用iv.setImageDrawable(bd);
代替iv.setImageBitmap(bitmapWithReflection);
即可基本消除锯齿。

PS2:

ImageAdapter有待确定的MemoryLeak问题,貌似的Bitmap的decode方法会造成ML,使用ImageAdapter时多次旋转屏幕后会出现OOM。目前可以通过将使用完毕的bimap调用recycle()方法和设置null并及时调用system.gc()得到一些改善,但是问题并不明显。
庆祝精华和推荐,增加3个PS~

PS3 ON PS1:

为什么开启抗锯齿后不明显。答案是,锯齿不可能完全消除,但开启抗锯齿后会有很大改善。
另外还说到为什么android不默认开启锯齿,以下是我的一点想法:
插值是我现在所知道的抗锯齿的算法,也就是计算像素间的相关度对其间插入中间像素以达到平滑图像边缘的效果。但这无疑会耗费了大量的运算。
虽然我没有经过测试,但是我猜测,使用antialias后图形性能至少会下降30%。
当然,在这里没有涉及到复杂的图形运算,所以开启抗锯齿不会有很明显的性能影响,但如果你在模拟器或者低端机型上测试就会发现一点问题。