My Blog List

Friday 24 August 2012

Image Reflection in android

Hi,fellas
Working on my one of android project i got stuck on how to get image reflection on android
after messing a lot i successfully created image reflection with a little bit complicated android coding stuff. so as usual m goona describe how  to achieve this
Here we go..

1.Start fresh project name it  as ImageReflectionDemo
2.Create xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/bpsingh"
        android:layout_width="127dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.21"
        
        android:src="@drawable/rihanna" />

</LinearLayout>

I just took one imageview with drawable image name bpsingh

3.Modify your Activity as


package com.parallelminds.appstore;

import android.app.Activity;

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader.TileMode;
import android.os.Bundle;
import android.widget.ImageView;
public class ImageReflection extends Activity{
ImageView imageview;

/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.imagereflectiondemo); 
        
        //The gap we want between the reflection and the original image
        final int reflectionGap = 4;
        
        //Get you bit map from drawable folder
        Bitmap originalImage = BitmapFactory.decodeResource(getResources(), 
                R.drawable.bpsingh);
        
        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 matix 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); 
       
       //Create an Image view and add our bitmap with reflection to it
       imageview=(ImageView) findViewById(R.id.rihana);
      // ImageView imageView = new ImageView(this);
       imageview.setImageBitmap(bitmapWithReflection);
}
}
       
4. Now run your project and you can see out put as


that's all
enjoy coding









1 comment: