android 裁剪gif,android圆角功能,非常好用,可以用在图片,视频,gif等上面

importandroid.content.Context;importandroid.content.res.TypedArray;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.graphics.Paint;importandroid.graphics.Path;importandroid.graphics.PorterDuff;importandroid.graphics.PorterDuffXfermode;importandroid.graphics.RectF;importandroid.graphics.Region;importandroid.util.AttributeSet;importandroid.view.View;importandroid.widget.RelativeLayout;/*** 圆角布局

* 支持自定义属性见<>declare-styleable name="RoundLayout">

*

* 需要圆角的View作为<>RoundLayout>的子View即可,设置<>attr_round_corner>圆角半径*/

public class RoundLayout extendsRelativeLayout {public float[] radii = new float[8]; //top-left, top-right, bottom-right, bottom-left

public Path mClipPath; //剪裁区域路径

public Paint mPaint; //画笔

public int mStrokeColor; //描边颜色

public int mStrokeWidth; //描边半径

public boolean mClipBackground; //是否剪裁背景

public Region mAreaRegion; //内容区域

public RectF mLayer; //画布图层大小

private int mRoundCorner; //圆角大小

public RoundLayout(Context context, intradius) {this(context);this.mRoundCorner =PixelUtils.dip2px(context, radius);

}publicRoundLayout(Context context) {this(context, null);

}publicRoundLayout(Context context, AttributeSet attrs) {this(context, attrs, 0);

}public RoundLayout(Context context, AttributeSet attrs, intdefStyleAttr) {super(context, attrs, defStyleAttr);

initAttrs(context, attrs);

}

@Overrideprotected void onSizeChanged(int w, int h, int oldw, intoldh) {super.onSizeChanged(w, h, oldw, oldh);

mLayer.set(0, 0, w, h);

refreshRegion(this);

}

@Overrideprotected voiddispatchDraw(Canvas canvas) {

canvas.saveLayer(mLayer,null, Canvas.ALL_SAVE_FLAG);super.dispatchDraw(canvas);

onClipDraw(canvas);

canvas.restore();

}

@Overridepublic voiddraw(Canvas canvas) {

refreshRegion(this);if(mClipBackground) {

canvas.save();

canvas.clipPath(mClipPath);super.draw(canvas);

canvas.restore();

}else{super.draw(canvas);

}

}public voidinitAttrs(Context context, AttributeSet attrs) {

TypedArray ta=context.obtainStyledAttributes(attrs, R.styleable.RoundLayout);

mStrokeColor=ta.getColor(R.styleable.RoundLayout_attr_stroke_color, Color.WHITE);

mStrokeWidth= ta.getDimensionPixelSize(R.styleable.RoundLayout_attr_stroke_width, 0);

mClipBackground= ta.getBoolean(R.styleable.RoundLayout_attr_clip_background, false);if (mRoundCorner == 0) {

mRoundCorner= ta.getDimensionPixelSize(R.styleable.RoundLayout_attr_round_corner, 4);

}int roundCornerTopLeft =ta.getDimensionPixelSize(

R.styleable.RoundLayout_attr_round_corner_top_left, mRoundCorner);int roundCornerTopRight =ta.getDimensionPixelSize(

R.styleable.RoundLayout_attr_round_corner_top_right, mRoundCorner);int roundCornerBottomLeft =ta.getDimensionPixelSize(

R.styleable.RoundLayout_attr_round_corner_bottom_left, mRoundCorner);int roundCornerBottomRight =ta.getDimensionPixelSize(

R.styleable.RoundLayout_attr_round_corner_bottom_right, mRoundCorner);

ta.recycle();

radii[0] =roundCornerTopLeft;

radii[1] =roundCornerTopLeft;

radii[2] =roundCornerTopRight;

radii[3] =roundCornerTopRight;

radii[4] =roundCornerBottomRight;

radii[5] =roundCornerBottomRight;

radii[6] =roundCornerBottomLeft;

radii[7] =roundCornerBottomLeft;

mLayer= newRectF();

mClipPath= newPath();

mAreaRegion= newRegion();

mPaint= newPaint();

mPaint.setColor(Color.WHITE);

mPaint.setAntiAlias(true);

setLayerType(View.LAYER_TYPE_HARDWARE,null);

}public voidrefreshRegion(View view) {int w = (int) mLayer.width();int h = (int) mLayer.height();

RectF areas= newRectF();

areas.left=view.getPaddingLeft();

areas.top=view.getPaddingTop();

areas.right= w -view.getPaddingRight();

areas.bottom= h -view.getPaddingBottom();

mClipPath.reset();

mClipPath.addRoundRect(areas, radii, Path.Direction.CW);

Region clip= new Region((int) areas.left, (int) areas.top,

(int) areas.right, (int) areas.bottom);

mAreaRegion.setPath(mClipPath, clip);

}public voidonClipDraw(Canvas canvas) {if (mStrokeWidth > 0) {//将与描边区域重叠的内容裁剪掉

mPaint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.DST_OUT));

mPaint.setColor(Color.WHITE);

mPaint.setStrokeWidth(mStrokeWidth* 2);

mPaint.setStyle(Paint.Style.STROKE);

canvas.drawPath(mClipPath, mPaint);//绘制描边

mPaint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.SRC_OVER));

mPaint.setColor(mStrokeColor);

mPaint.setStyle(Paint.Style.STROKE);

canvas.drawPath(mClipPath, mPaint);

}

mPaint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.DST_IN));

mPaint.setColor(Color.WHITE);

mPaint.setStyle(Paint.Style.FILL);

canvas.drawPath(mClipPath, mPaint);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Picasso – Android系统的图片下载和缓存类库 Picasso 是Square开源的一个用于Android系统下载和缓存图片的项目。该项目和其他一些下载图片项目的主要区别之一是:使用4.0+系统上的HTTP缓存来代替磁盘缓存。 Picasso 的使用是非常简单的,例如: 帮助 1 Picasso.with(context).load("http://i.imgur.com/DvpvklR.png.into(imageView")); Picasso有如下特性: 处理Adapter中的 ImageView 回收和取消已经回收ImageView的下载进程 使用最少的内存完成复杂的图片转换,比如把下载的图片转换为圆角等 自动添加磁盘和内存缓存 具体介绍 在Adapter中下载 自动检测Adapter中的ImageView重用和取消不必要的下载 帮助 01.@Override public void getView(int position, View convertView, ViewGroup parent) { 02.SquaredImageView view = (SquaredImageView) convertView; 03.if (view == null) { 04.view = new SquaredImageView(context); 05.} 06.String url = getItem(position);Picasso.with(context).load(url).into(view); 07.} 复制代码 图片转换 转换图片以适合所显示的ImageView,来减少内存消耗 帮助 01.Picasso.with(context) 02..load(url) 03..resize(50, 50) 04..centerCrop() 05..into(imageView) 复制代码 还可以设置自定义转换来实现高级效果,例如下面的矩形特效(把图片居中裁剪为矩形) 帮助 01.public class CropSquareTransformation implements Transformation { 02.@Override public Bitmap transform(Bitmap source) { 03.int size = Math.min(source.getWidth(), source.getHeight()); 04.int x = (source.getWidth() - size) / 2; 05.int y = (source.getHeight() - size) / 2; 06.Bitmap result = Bitmap.createBitmap(source, x, y, size, size); 07.if (result != source) { 08.source.recycle(); 09.} 10.return result; 11.}@Override public String key() { return "square()"; } 12.} 复制代码 用该类示例调用函数 RequestBuilder.transform(Transformation) 即可。 占位符图片 Picasso支持下载和加载错误占位符图片。 帮助 Picasso.with(context) .load(url) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView); 如果重试3次(下载源代码可以根据需要修改)还是无法成功加载图片 则用错误占位符图片显示。 支持本地资源加载 从 Resources, assets, files, content providers 加载图片都支持 Picasso.with(context).load(R.drawable.landing_screen).into(imageView1); Picasso.with(context).load(new File("/images/oprah_bees.gif")).into(imageView2); 调试支持 调用函数 Picasso.setDebug(true) 可以在加载的图片左上角显示一个 三角形 ,不同的颜色代表加载的来源 红色:代表从网络下载的图片 黄色:代表从磁盘缓存加载的图片 绿色:代表从内存中加载的图片 如果项目中使用了OkHttp库的话,默认会使用OkHttp来下载图片。否则使用HttpUrlConnection来下载图片
图片批量裁剪器(精华版)是 一款功能丰富、实用、应有尽有的图片/视频批量裁剪、水印、转换、更名,以及其他处理的专业工具!批量处理时不低于5万个文件。 以管理员身份和兼容xp3模式下运行,可支持win7,win8,win10,64位。 图片批量裁剪器(精华版)功能 1. 支持常见图片类型如bmp,jpg,tif,gif,png,支持部分非常见图片类型,如PSD,PCX,ICO,Pdf,动态Gif等等;支持对大多数常见的音频/视频文件格式的裁剪、转换、水印、分割、合并等; 2.提供对图片文件的丰富多彩实用的各种批量裁剪模式,如相对、绝对、固定、大小、等分/非等分分切、分隔、同比/非同比缩放、拼接/无缝拼合、贴边等等几百种裁剪处理功能; 支持圆角矩形/椭圆形/圆形/任意角度裁剪,支持自定义圆角矩形半径裁剪; 3.其他更丰富的裁剪功能,请参见主页说明或程序,比如:提取图片上的文字并保存先裁剪后加水印一步到位忽略处理过的文件夹手动指定裁剪区域多裁剪区域裁剪打印二维码图片转Pdf 过滤小图或缩略图 AB文件夹配对拼合 …… 内置其他功能列表: 1.图片烙制水印(文字水印,图片水印,淘宝卖家专用水印,以及其他上百种水印功能模式供选择,特别如以拍摄日期作为文字水印,递增数字水印等等,批量制卡证等) 2.图片旋转及格式转换(特别功能如智能扳正) 3.图片亮度/对比度调整 4.图片压缩(特色功能如保留Exif信息的压缩) 5.定制图片大小/尺寸(特色功能如能按指定的文件大小压缩,比如压缩到120kb左右,仅压缩大图,小图忽略压缩等) 6.图片像素筛查(从海量图片中筛查出满足条件的图片供删除、移动、复制、更名等) 7.(图片)文件时间属性修改(比如更改拍摄日期,没有做不到只有想不到) 8.图像综合处理 9.(图片)文件批量更名(强大丰富的多种文件批量更名功能) 10.文件随机/顺序/定时抽取分发(将海量文件复制或移动到指定的文件夹中) 11.证件照批量更换背景颜色 12.色块/色条魔术棒裁剪,颜色替换 13.音视频裁剪/分割/合并/转换/加水印/录音/录像 14.批量替换图片中的图片或文字 15.图像批量组合排版 16.证件制作排版(广告公司实用) 17.Jpg图片Exif信息编辑器 18.重复或相似图片批量查找 19.相对/绝对/固定裁剪简易兼容备用版 20.Jpg转视频avi或其他(影楼后期制作DV工具) 21.图片批量浏览挑拣器(影楼客户自选照片实用) 22.图片批量叠加/混合 23.视频批量加密(特色功能如用户可自行在线找回播放密码,一机一码,一视频一码) 24.账号、密码批量管理小秘书(管理你各种账号密码,完全安全加密) 25.动态Gif图片裁剪、水印;图片压制成动态Gif(按时间轴裁剪裁剪后的gif仍然是动画模式) 26.音频片段截取助手 27.广告喷绘大图专用分切器(喷绘行业专用) 图片批量水印裁剪器 v6.0.20161008精华版更新内容: 1.新增动态Gif水印区域批量涂抹模糊,或者图片水印区域批量涂抹功能; 2.修正水印添加模块中,还原或重设DPI功能时失效异常的问题; 3.在水印批量添加模块中,新增还原原图DPI以及转为CMYK印刷颜色模式的新功能; 4.新增批量生成二维码图片功能; 5.新增图片裁剪/缩放/格式转换/添加水印等单张综合处理功能模块; 6.修正先选择后裁剪功能实现的问题; 7.新增批量对动态Gif文件指定水印区域模糊化处理功能; 8.新增定时对指定的目录中的图片挂机无人值守自动裁剪功能,忽略已处理过的图片文件; 9.新增纯文字水印添加功能模块; 10.新增学生证件照排版和学生胸卡排版制作打印功能模块; 11.改进修正Jpg系列图片视频功能,并新增同时给转换后的视频叠加音频的功能; 12.修正改进动态Gif裁剪、水印功能模块; 13.改进跟图片OCR文字识别的有关问题和功能; 14.新增备用下载服务器和网络登录版; 15.修正精确去片头片尾功能; 16.修正某些音频视频文件播放时间不足一秒时无法加载入文件列表的异常; 17.修正媒体批量合并功能模块全部失效的问题; 18.新增以文件夹名作为动态文字水印的功能图片批量裁剪器(精华版)截图
xUtils包含了orm,http(s),image,view注解,但依然很轻量级(251K),并且特性强大,方便扩展。 xUtils特点: 1、orm:高效稳定的orm工具,使得http接口实现时更方便的支持cookie和缓存。 灵活的,类似linq表达式的接口。 和greenDao一致的性能。 2、http(s):基于UrlConnection,Android4。4以后底层为okHttp实现。 请求协议支持11种谓词:GET,POST,PUT,PATCH,HEAD,MOVE,COPY,DELETE,OPTIONS,TRACE,CONNECT 支持超大文件(超过2G)上传 支持断点下载(如果服务端支持Range参数,客户端自动处理断点下载) 支持cookie(实现了domain,path,expiry等特性) 支持缓存(实现了Cache-Control,Last-Modified,ETag等特性,缓存内容过多时使用过期时间+LRU双重机制清理) 支持异步和同步(可结合RxJava使用)调用 3、image:有了http(s)及其下载缓存的支持,image模块的实现相当的简洁。 支持内存缓存,磁盘缓存(缩略图和原图),并且支持回收被view持有,但被MemCache移除的图片,减少页面回退时的闪烁。 支持在ListView滑动时,自动停止被回收复用的item对应的下载任务(再次下载时断点续传) 支持webp,gif(部分比较老的系统只展示静态图) 支持圆角,圆形,方形等裁剪,支持自动旋转... 4、view注解:view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定。 事件注解支持且不受混淆影响...(参考混淆配置) 支持绑定拥有多个方法的listener
xUtils包含了orm,http(s),image,view注解,但依然很轻量级(251K),并且特性强大,方便扩展。xUtils特点1、orm:高效稳定的orm工具,使得http接口实现时更方便的支持cookie和缓存。 灵活的,类似linq表达式的接口。 和greenDao一致的性能。 2、http(s):基于UrlConnection,Android4。4以后底层为okHttp实现。 请求协议支持11种谓词:GET,POST,PUT,PATCH,HEAD,MOVE,COPY,DELETE,OPTIONS,TRACE,CONNECT 支持超大文件(超过2G)上传 支持断点下载(如果服务端支持Range参数,客户端自动处理断点下载) 支持cookie(实现了domain,path,expiry等特性) 支持缓存(实现了Cache-Control,Last-Modified,ETag等特性,缓存内容过多时使用过期时间+LRU双重机制清理) 支持异步和同步(可结合RxJava使用)调用 3、image:有了http(s)及其下载缓存的支持,image模块的实现相当的简洁。 支持内存缓存,磁盘缓存(缩略图和原图),并且支持回收被view持有,但被MemCache移除的图片,减少页面回退时的闪烁。 支持在ListView滑动时,自动停止被回收复用的item对应的下载任务(再次下载时断点续传) 支持webp,gif(部分比较老的系统只展示静态图) 支持圆角,圆形,方形等裁剪,支持自动旋转... 4、view注解:view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定。 事件注解支持且不受混淆影响...(参考混淆配置) 支持绑定拥有多个方法的listener

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值