-
canvas.drawBitmap(bitmap, rect, rect, paint);
-
return bitmap2;
-
}
-
// Reflect Bitmap
-
public static Bitmap createReflectedBitmap(Bitmap bitmap){
-
final int reflectedGap = 4;
-
int width = bitmap.getWidth();
-
int height = bitmap.getHeight();
-
Matrix matrix = new Matrix();
-
matrix.preScale(1, -1);
-
Bitmap reflectedImage = Bitmap.createBitmap(bitmap, 0, height/2, width, height/2, matrix, false);
-
Bitmap reflectedBitmap = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
-
Canvas canvas = new Canvas(reflectedBitmap);
-
canvas.drawBitmap(bitmap, 0, 0, null);
-
Paint defaultPaint = new Paint();
-
canvas.drawRect(0, height, width, height + reflectedGap, defaultPaint);
-
canvas.drawBitmap(reflectedImage, 0, height + reflectedGap, null);
-
Paint paint = new Paint();
-
L
inearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
-
reflectedBitmap.getHeight() + reflectedGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
-
paint.setShader(shader);
-
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
-
canvas.drawRect(0, height, width, reflectedBitmap.getHeight() + reflectedGap, paint);
-
return reflectedBitmap;
-
}
-
}
Java Code:
package com.learn.games;
-
import android.app.Activity;
-
import android.graphics.Bitmap;
-
import android.graphics.drawable.BitmapDrawable;
-
import android.graphics.drawable.Drawable;
-
import android.os.Bundle;
-
import android.widget.ImageView;
-
public class MyBitmapProcessActivity extends Activity {
-
private ImageView imgView1;
-
private ImageView imgView2;
-
private ImageView imgView3;
-
private ImageView imgView4;
-
/** Called when the activity is first created. */
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
drawBitmap();
-
}
-
private void drawBitmap(){
-
imgView1 = (ImageView)findViewById(R.id.imgView1);
-
imgView2 = (ImageView)findViewById(R.id.imgView2);
-
imgView3 = (ImageView)findViewById(R.id.imgView3);
-
imgView4 = (ImageView)findViewById(R.id.imgView4);
-
Drawable drawable = this.getWallpaper();
-
Bitmap bitmap = bitmapProcess.drawable2Bitmap(drawable); // drawable to bitmap
-
Bitmap zoomBitmap = bitmapProcess.zoomBitmap(bitmap, 100, 100); // zoom
-
Bitmap roundBitmap = bitmapProcess.getRoundCornerBitmap(zoomBitmap, 10.0f); // round corner
-
Bitmap reflectedBitmap = bitmapProcess.createReflectedBitmap(zoomBitmap); // reflect bitmap
-
// drawable to bitmap
-
imgView1.setImageBitmap(bitmap);
-
imgView2.setImageBitmap(zoomBitmap);
-
imgView3.setImageBitmap(roundBitmap);
-
imgView4.setImageBitmap(reflectedBitmap);
-
// bitmap to drawable
-
Drawable roundDrawable = new BitmapDrawable(roundBitmap);
-
Drawable reflectedDrawable = new BitmapDrawable(reflectedBitmap);
-
imgView1.setBackgroundDrawable(roundDrawable);
-
imgView2.setBackgroundDrawable(reflectedDrawable);
-
}
-
}
XML:
<?xml version\="1.0" encoding\="utf-8"?>-
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
-
android:orientation=“vertical”
-
android:layout_width=“fill_parent”
-
android:layout_height=“fill_parent”
-
>
-
<ImageView android:id="@+id/imgView1"
-
android:layout_width=“wrap_content”
-
android:layout_height=“wrap_content”/>
-
<ImageView android:id="@+id/imgView2"
-
android:layout_width=“wrap_content”
-
android:layout_height=“wrap_content”/>
-
<ImageView android:id="@+id/imgView3"
-
android:layout_width=“wrap_content”
-
android:layout_height=“wrap_content”/>
-
<ImageView android:id="@+id/imgView4"
-
android:layout_width=“wrap_content”
-
android:layout_height=“wrap_content”/>
-
</LinearLayout>
效果图:
drawable2bitmap
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mryWQh0M-1647693411808)(http://hi.csdn.net/attachment/201108/23/0_1314109891OC46.gif)]
zoom
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dipwcGFH-1647693411808)(http://hi.csdn.net/attachment/201108/23/0_1314109902k1K4.gif)]
最后送福利了,现在关注我可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿
1808)]
zoom
[外链图片转存中…(img-dipwcGFH-1647693411808)]
最后送福利了,现在关注我可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿
[外链图片转存中…(img-YJfxPTuv-1647693411809)]