Android Cover Flow with image shadow effect

2019-04-15 07:23发布

问题:

I want to implement cover flow as below

I have tried Carousel, but its not the same thing. Did some google search was not able to find something even near to the cover flow implemented in given example.

回答1:

Definitely have a look at this, FancyCoverFlow.

There is a demo app for it in the Play store as well that shows the reflection requirement you'd like.



回答2:

have you tried this:

blog post

public Bitmap getRefelection(Bitmap image) {
  // The gap we want between the reflection and the original image
  final int reflectionGap = 0;

  // Get you bit map from drawable folder
  Bitmap originalImage = image;

  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
  /*if(bitmapWithReflection!=null && !bitmapWithReflection.isRecycled()){
   bitmapWithReflection.recycle();
   bitmapWithReflection=null;
  }*/
  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 the reflection Image
  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, 0x40ffffff, 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);
  if(originalImage!=null && originalImage.isRecycled()){
   originalImage.recycle();
   originalImage=null;
  }
  if(reflectionImage!=null && reflectionImage.isRecycled()){
   reflectionImage.recycle();
   reflectionImage=null;
  }
  return bitmapWithReflection;
 }


回答3:

Have you gone through the Android Coverflow which is bit different form the Carousel which you want.



回答4:

I made cover flow widget which is not dependent on gallery. You can find it here. I will add some samples later.

http://applm.github.io/ma-components/