Android 轻松实现图片倒影效果实例代码


在Android中实现图片的倒影效果,可以通过自定义View并在其`onDraw`方法中绘制原始图片及其倒影来实现。以下是一个简单的示例代码,展示了如何在一个自定义的`ImageView`中实现这一效果。

首先,你需要创建一个自定义的`ImageView`类:


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;

public class ReflectionImageView extends ImageView {

    private Paint paint;
    private Bitmap originalBitmap;
    private Bitmap reflectionBitmap;

    public ReflectionImageView(Context context) {
        super(context);
        init();
    }

    public ReflectionImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public ReflectionImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        // 设置倒影的透明度,这里设置为半透明
        paint.setAlpha(128);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        // 确保图片已加载
        if (getDrawable() != null) {
            Drawable drawable = getDrawable();
            if (drawable instanceof BitmapDrawable) {
                BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
                originalBitmap = bitmapDrawable.getBitmap();

                // 创建倒影图片
                reflectionBitmap = Bitmap.createBitmap(originalBitmap, 0, 0, originalBitmap.getWidth(), originalBitmap.getHeight());

                // 绘制原始图片
                canvas.drawBitmap(originalBitmap, 0, 0, null);

                // 绘制倒影
                Matrix matrix = new Matrix();
                matrix.preScale(1, -1); // 垂直翻转
                Bitmap reflectionImage = Bitmap.createBitmap(reflectionBitmap, 0, 0, reflectionBitmap.getWidth(), reflectionBitmap.getHeight(), matrix, true);

                // 倒影的位置和大小调整
                int reflectionY = getHeight() - reflectionImage.getHeight();
                canvas.drawBitmap(reflectionImage, 0, reflectionY, paint);
            }
        }
    }
}

**注意**:

1. 这个示例代码假设你希望倒影和原图大小相同,并且倒影位于原图的下方。

2. 倒影的透明度通过`paint.setAlpha(128);`设置,你可以根据需要调整这个值。

3. 倒影是通过创建一个新的`Bitmap`,并将其垂直翻转来实现的。

4. 倒影的绘制位置是通过计算得到的,确保它位于原图的下方。

在你的布局文件中使用这个自定义的`ImageView`:


<com.yourpackage.ReflectionImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/your_image" />

请确保将`com.yourpackage.ReflectionImageView`替换为你的实际包名和类名。