图片圆角:
Bitmap getRBitmap(Bitmap bitmap)
{
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
Paint paint=new Paint();
paint.setAntiAlias(true);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 先画一个圆角的矩形'
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));这个模式是源图 放在目标图上,把目标图当作剪切的工具,留下被过滤掉的原图
canvas.drawBitmap(bitmap, rect, rect, paint); ,这里bitmap是原图,rectf是目标
return output;
}
不明白paint.setXfermode 图片重叠模式的 可以看看 http://folksy.iteye.com/blog/1488629 很详细
画阴影:
public static Bitmap getShadow(Bitmap bitmap,int shadowshift,int shadow)
{
RectF rectF;
Bitmap newBitmap=Bitmap.createBitmap(bitmap.getWidth()+shadowshift+shadow,bitmap.getHeight()+shadowshift+shadow,Config.ARGB_8888);//要扩展偏移量
Canvas canvas=new Canvas(newBitmap); 在newBitmap上作画
Paint paint=new Paint();
paint.setShadowLayer(shadow, -shadowshift, shadowshift, 0x7f000000); //第一个参数是阴影度 第二个参数是x,这个是原图的坐标为基础的
rectF=new RectF(shadowshift+shadow,shadowshift,bitmap.getWidth(),bitmap.getHeight()); //需要加shadow,因为偏移量是shadowshift,如果从0开始,就覆盖了偏移量
canvas.drawRoundRect(rectF, 0, 0, paint);
canvas.drawBitmap(bitmap, shadowshift+shadow, 0, null); //阴影的大小+阴影偏移量的大小
return newBitmap;
}
y坐标翻转:
Bitmap getTurnBitmap(Bitmap bitmap)
{
Camera c=new Camera();
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap .getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
c.save();
c.rotateY(180);
c.translate(-48.0f, 48.0f, 0.0f); //xyz ,z是面对屏幕的距离 100就是缩小 200就是更小 ,越往屏幕里面值越大 这里48是下面matrix 移动后的位置 现在被我移动到(0,0)
c.getMatrix(matrix);
//pre在前,post在后
c.restore();
matrix.preTranslate(-(bitmap.getWidth()/ 2), -(bitmap.getHeight() / 2));//目的地坐标
matrix.postTranslate((bitmap.getWidth() / 2), (bitmap.getHeight()/ 2));
canvas.drawBitmap(bitmap, matrix,null);
return output;
}