Android超炫图片浏览器代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android超炫图片浏览器代码

使用过Android自带的gallery组件的人都知道,gallery实现的效果就是拖动浏览一组图片,相比iphone里也是用于拖动浏览图片的coverflow,显然逊色不少。实际上,可以通过扩展gallery,通过伪3D变换可以基本实现coverflow的效果。本文通过源代码解析这一功能的实现。具体代码作用可参照注释。

最终实现效果如下:

要使用gallery,我们必须首先给其指定一个adapter。在这里,我们实现了一个自定义的ImageAdapter,为图片制作倒影效果。

传入参数为context和程序内drawable中的图片ID数组。之后调用其中的createReflectedImages()方法分别创造每一个图像的倒影效果,生成对应的ImageView数组,最后在getView()中返回。

/*

* Copyright (C) 2010 Neil Davies

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* /licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*

* This code is base on the Android Gallery widget and was Created

* by Neil Davies neild001 'at' gmail dot com to be a Coverflow widget

*

* @author Neil Davies

*/

public class ImageAdapter extends BaseAdapter {

int mGalleryItemBackground;

private Context mContext;

private Integer[] mImageIds ;

private ImageView[] mImages;

public ImageAdapter(Context c, int[] ImageIds) {

mContext = c;

mImageIds = ImageIds;

mImages = new ImageView[mImageIds.length];

}

public boolean createReflectedImages() {

// The gap we want between the reflection and the original image final int reflectionGap = 4;

int index = 0;

for (int imageId : mImageIds) {

Bitmap originalImage = BitmapFactory.decodeResource( mContext.getResources(), imageId);

int width = originalImage.getWidth();

int height = originalImage.getHeight();

// This will not scale but will flip on the Y axis

Matrix matrix = new Matrix();

matrix.preScale(1, -1);

// Create a Bitmap with the flip matrix applied to it.

// We only want the bottom half of the image

Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false);

// Create a new bitmap with same width but taller to fit

// reflection

Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);

// Create a new Canvas with the bitmap that's big enough for

// the image plus gap plus reflection

Canvas canvas = new Canvas(bitmapWithReflection);

// Draw in the original image

canvas.drawBitmap(originalImage, 0, 0, null);

// Draw in the gap

Paint deafaultPaint = new Paint();

canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);

// Draw in the reflection

相关文档
最新文档