“魚龍隱蒼翠,鳥獸遊清泠;菰蒲林下秋,薜荔波中輕。”這是唐代詩人儲光羲在《同諸公秋霽曲江俯見南山》中描寫倒影的神奇魅力的詩句、而現如今我們通過代碼就可以輕鬆簡單的實現這種倒影效果了、是不是強大呢、好了、進入主題、
實現圖片倒影效果的主要方法如下:
/**
* 圖片倒影效果
* @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();
}
}
倒影效果圖如下: