android rotate_第1张图片
rotate:fromDegrees:其实角度。toDegrees:旋转的角度。
translate:fromXDelta,fromYDelta:相当本视图左上角的X,Y坐标。toXDelta,toYDelta:移动后的X,Y坐标。
alpha:
fromAlpha:起始的透光度、0为全透明,完全不可见;1为不透明,完全可见。
特别提醒:
在Android内部,针对所有的变换,无论起始点是什么时候,其指定的起始值使用于动画开始时的相应属性值。
imageView.setAlpha(int alpha);

用于设置imageView的透明度,取值范围为1--255,1为透明,255为完全不透明。


package com.test.hsx;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuff.Mode;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.graphics.drawable.NinePatchDrawable;import android.util.AttributeSet;import android.widget.ImageView;/** * 圆形ImageView,可设置最多两个宽度不同且颜色不同的圆形边框。 *  * @author Alan */public class RoundImageView extends ImageView {private int mBorderThickness = 0;private Context mContext;private int defaultColor = 0xFFFFFFFF;// 如果只有其中一个有值,则只画一个圆形边框private int mBorderOutsideColor = 0;private int mBorderInsideColor = 0;// 控件默认长、宽private int defaultWidth = 0;private int defaultHeight = 0;public RoundImageView(Context context) {super(context);mContext = context;}public RoundImageView(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;setCustomAttributes(attrs);}public RoundImageView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);mContext = context;setCustomAttributes(attrs);}private void setCustomAttributes(AttributeSet attrs) {TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.roundedimageview);mBorderThickness = a.getDimensionPixelSize(R.styleable.roundedimageview_border_thickness, 0);mBorderOutsideColor = a.getColor(R.styleable.roundedimageview_border_outside_color, defaultColor);mBorderInsideColor = a.getColor(R.styleable.roundedimageview_border_inside_color, defaultColor);}@Overrideprotected void onDraw(Canvas canvas) {Drawable drawable = getDrawable();if (drawable == null) {return;}if (getWidth() == 0 || getHeight() == 0) {return;}this.measure(0, 0);if (drawable.getClass() == NinePatchDrawable.class)return;Bitmap b = ((BitmapDrawable) drawable).getBitmap();Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);if (defaultWidth == 0) {defaultWidth = getWidth();}if (defaultHeight == 0) {defaultHeight = getHeight();}// 保证重新读取图片后不会因为图片大小而改变控件宽、高的大小(针对宽、高为wrap_content布局的imageview,但会导致margin无效)// if (defaultWidth != 0 && defaultHeight != 0) {// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(// defaultWidth, defaultHeight);// setLayoutParams(params);// }int radius = 0;if (mBorderInsideColor != defaultColor && mBorderOutsideColor != defaultColor) {// 定义画两个边框,分别为外圆边框和内圆边框radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - 2 * mBorderThickness;// 画内圆drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderInsideColor);// 画外圆drawCircleBorder(canvas, radius + mBorderThickness + mBorderThickness / 2, mBorderOutsideColor);} else if (mBorderInsideColor != defaultColor && mBorderOutsideColor == defaultColor) {// 定义画一个边框radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - mBorderThickness;drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderInsideColor);} else if (mBorderInsideColor == defaultColor && mBorderOutsideColor != defaultColor) {// 定义画一个边框radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2 - mBorderThickness;drawCircleBorder(canvas, radius + mBorderThickness / 2, mBorderOutsideColor);} else {// 没有边框radius = (defaultWidth < defaultHeight ? defaultWidth : defaultHeight) / 2;}Bitmap roundBitmap = getCroppedRoundBitmap(bitmap, radius);canvas.drawBitmap(roundBitmap, defaultWidth / 2 - radius, defaultHeight / 2 - radius, null);}/** * 获取裁剪后的圆形图片 *  * @param radius *            半径 */public Bitmap getCroppedRoundBitmap(Bitmap bmp, int radius) {Bitmap scaledSrcBmp;int diameter = radius * 2;// 为了防止宽高不相等,造成圆形图片变形,因此截取长方形中处于中间位置最大的正方形图片int bmpWidth = bmp.getWidth();int bmpHeight = bmp.getHeight();int squareWidth = 0, squareHeight = 0;int x = 0, y = 0;Bitmap squareBitmap;if (bmpHeight > bmpWidth) {// 高大于宽squareWidth = squareHeight = bmpWidth;x = 0;y = (bmpHeight - bmpWidth) / 2;// 截取正方形图片squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);} else if (bmpHeight < bmpWidth) {// 宽大于高squareWidth = squareHeight = bmpHeight;x = (bmpWidth - bmpHeight) / 2;y = 0;squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth, squareHeight);} else {squareBitmap = bmp;}if (squareBitmap.getWidth() != diameter || squareBitmap.getHeight() != diameter) {scaledSrcBmp = Bitmap.createScaledBitmap(squareBitmap, diameter, diameter, true);} else {scaledSrcBmp = squareBitmap;}Bitmap output = Bitmap.createBitmap(scaledSrcBmp.getWidth(), scaledSrcBmp.getHeight(), Config.ARGB_8888);Canvas canvas = new Canvas(output);Paint paint = new Paint();Rect rect = new Rect(0, 0, scaledSrcBmp.getWidth(), scaledSrcBmp.getHeight());paint.setAntiAlias(true);paint.setFilterBitmap(true);paint.setDither(true);canvas.drawARGB(0, 0, 0, 0);canvas.drawCircle(scaledSrcBmp.getWidth() / 2, scaledSrcBmp.getHeight() / 2, scaledSrcBmp.getWidth() / 2, paint);paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));canvas.drawBitmap(scaledSrcBmp, rect, rect, paint);// bitmap回收(recycle导致在布局文件XML看不到效果)// bmp.recycle();// squareBitmap.recycle();// scaledSrcBmp.recycle();bmp = null;squareBitmap = null;scaledSrcBmp = null;return output;}/** * 边缘画圆 */private void drawCircleBorder(Canvas canvas, int radius, int color) {Paint paint = new Paint();/* 去锯齿 */paint.setAntiAlias(true);paint.setFilterBitmap(true);paint.setDither(true);paint.setColor(color);/* 设置paint的 style 为STROKE:空心 */paint.setStyle(Paint.Style.STROKE);/* 设置paint的外框宽度 */paint.setStrokeWidth(mBorderThickness);canvas.drawCircle(defaultWidth / 2, defaultHeight / 2, radius, paint);}}


Bitmap.createBitmap函数有6个重载方法
引用 public static Bitmap createBitmap (Bitmap src)
从原位图src复制出一个新的位图,和原始位图相同

public static Bitmap createBitmap (int[] colors, int width, int height, Bitmap.Config config)
这个函数根据颜色数组来创建位图,注意:颜色数组的长度>=width*height

此函数创建位图的过程可以简单概括为为:更加width和height创建空位图,然后用指定的颜色数组colors来从左到右从上至下一次填充颜色。config是一个枚举,可以用它来指定位图“质量”。

public static Bitmap createBitmap (int[] colors, int offset, int stride, int width, int height, Bitmap.Config config)
此方法与2类似,但我还不明白offset和stride的作用。

public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter)
从原始位图剪切图像,这是一种高级的方式。可以用Matrix(矩阵)来实现旋转等高级方式截图
参数说明:
  Bitmap source:要从中截图的原始位图
  int x:起始x坐标
  int y:起始y坐标
int width:要截的图的宽度
int height:要截的图的宽度
Bitmap.Config config:一个枚举类型的配置,可以定义截到的新位图的质量
返回值:返回一个剪切好的Bitmap
public static Bitmap createBitmap (int width, int height, Bitmap.Config config)
根据参数创建新位图

public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height)
简单的剪切图像的方法

更多相关文章

  1. Android取消EditText自带黄色边框
  2. Android 带小圆圈的倒计时圆形进度条
  3. Android 高德地图自定义定位图标的显示
  4. 【Android UI】自定义圆形Loading动画
  5. android中图片的处理(绘制圆形,圆角||缩略图)
  6. Android自定义对话框去掉白色边框
  7. android开源系列:CircleImageView自定义圆形控件的使用
  8. Android的AlertDialog,setView后去除黑色边框

随机推荐

  1. android 文件搜索
  2. Android4.0中修改挂断键(ENDCALL)的默认行
  3. Android/Java仿微信按时间长短分类显示时
  4. Android带参数链接请求服务器
  5. android 源码的一些修改定制方案
  6. 禁止状态栏下拉
  7. Android intent 传递数组对象序列化
  8. Android监听Dialog点击外部区域
  9. ffmpeg compile with neon support for a
  10. android 背光控制 HAL层分析