Android Cover Flow

10:00 muhtar arfa 0 Comments


Pada tutorial kali ini saya akan membersembahkan sebuah animasi yang bernama Cover Flow, dimana tingkat pembuatan animasi ini agak sedikit rumit :)

Cover Flow yang terdapat pada tutorial kali ini adalah sebuah pergeseran image dimana sebuah gambar apabila digeser akan pindah ke image yang lain tapi dengan tingkat pergeseran yang indah dan mengesankan dengan kode sebagai berikut


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(
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
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap,
null);

// Create a shader that is a linear gradient that covers the
// reflection
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
originalImage.getHeight(), 0,
bitmapWithReflection.getHeight() + reflectionGap,
0x70ffffff, 0x00ffffff, TileMode.CLAMP);
// Set the paint to use this shader (linear gradient)
paint.setShader(shader);
// Set the Transfer mode to be porter duff and destination in
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
// Draw a rectangle using the paint with our linear gradient
canvas.drawRect(0, height, width,
bitmapWithReflection.getHeight() + reflectionGap, paint);

ImageView imageView = new ImageView(mContext);
imageView.setImageBitmap(bitmapWithReflection);
android.widget.Gallery.LayoutParams imgLayout = new CoverFlow.LayoutParams(
320, 480);
imageView.setLayoutParams(imgLayout);
imageView.setPadding(30, 100, 20, 20);
mImages[index++] = imageView;

}
return true;
}

pokoknya inti dari kode diatas adalah method createReflectedImages() yang bertanggung jawab mengendalikan pergeseran image tapi pada kode diatas ada objek yang deprecated(sudah tidak dipakai lagi) jadi temen-temen kalau ada yang ingin mencoba tinggal diperbaiki saja errornya dan kodenya saya letakkan disini.

0 komentar: