“鱼龙隐苍翠,鸟兽游清泠;菰蒲林下秋,薜荔波中轻。”这是唐代诗人储光羲在《同诸公秋霁曲江俯见南山》中描写倒影的神奇魅力的诗句、而现如今我们通过代码就可以轻松简单的实现这种倒影效果了、是不是强大呢、好了、进入主题、
实现图片倒影效果的主要方法如下:
/**
* 图片倒影效果
* @param originalImage
* @return
*/
public static Bitmap createMirrorImage(Bitmap originalImage) {
int width = originalImage.getWidth();
int height = originalImage.getHeight();
//反射倒影图片的高度
int mirrorHeight = height>>1;
Matrix matrix = new Matrix();
// 实现图片翻转90度
matrix.preScale(1, -1);
// 创建倒影图片(是原始图片的一半大小)
Bitmap mirrorImage = Bitmap.createBitmap(originalImage, 0,mirrorHeight , width, mirrorHeight, matrix, false);
// 创建总图片(原图片 + 倒影图片+中间间隔1)
Bitmap finalBitmap = Bitmap.createBitmap(width, height + mirrorHeight + 1, Config.ARGB_8888);
// 创建画布
Canvas canvas = new Canvas(finalBitmap);
canvas.drawBitmap(originalImage, 0, 0, null);
//把倒影图片画到画布上 (中间间隔1感觉更真实)
canvas.drawBitmap(mirrorImage, 0, height + 1, null);
Paint shaderPaint = new Paint();
//创建线性渐变LinearGradient对象
LinearGradient shader = new LinearGradient(0, height + 1, 0, finalBitmap.getHeight(), 0x7fffffff,
0x00ffffff, TileMode.MIRROR);
shaderPaint.setShader(shader);
shaderPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
//画布画出反转图片大小区域、然后把渐变效果加到其中、就出现了图片的倒影效果、
canvas.drawRect(0, height + 1, width, finalBitmap.getHeight(), shaderPaint);
return finalBitmap;
}
在这里我写了个简单的小程序、来实现图片倒影的效果、下面是测试时主要用到的一些文件和测试代码:
测试用到的原图片文件:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000"
android:gravity="center">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity {
private ImageView iv;
private void init(){
iv = (ImageView)findViewById(R.id.iv);
Bitmap bmp = ((BitmapDrawable) getResources().getDrawable(R.drawable.test)).getBitmap();
iv.setImageBitmap(createMirrorImage(bmp));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
}
倒影效果图如下: