資源簡介
android 仿微信頭像裁剪,中間的裁剪框 是圓形或者方形,支持手勢雙擊縮放,多手指移動縮放,移動圖片

代碼片段和文件信息
package?com.yjs.android.view.imageview;
import?android.content.Context;
import?android.content.res.TypedArray;
import?android.graphics.Bitmap;
import?android.graphics.Canvas;
import?android.graphics.Color;
import?android.graphics.Matrix;
import?android.graphics.Paint;
import?android.graphics.PorterDuff;
import?android.graphics.PorterDuffXfermode;
import?android.graphics.RectF;
import?android.graphics.drawable.BitmapDrawable;
import?android.graphics.drawable.Drawable;
import?android.net.Uri;
import?android.util.AttributeSet;
import?android.view.GestureDetector;
import?android.view.GestureDetector.SimpleOnGestureListener;
import?android.view.MotionEvent;
import?android.view.ScaleGestureDetector;
import?android.view.View;
import?com.jobs.lib_v1.device.DeviceUtil;
import?com.yjs.android.R;
import?com.yjs.android.utils.TextureSizeUtils;
/**
?*?原作者地址:http://blog.csdn.net/maosidiaoxian/article/details/50828664
?*??2018-02-01
?*?截圖組件
?*?modified?by???2019-10-30
?*?修改如下:
?*?@see?#drawRectangleOrCircle(Canvas)?采用PorterDuffXfermode來畫圖片上的遮罩。
?*?@see?#clip()??不論是圓形框還是方形框,截圖都是方形圖片數據,同樣采用PorterDuffXfermode來截圖的,比之前
?*????????????????計算縮放比例值更可靠一樣。
?*?@see?#onTouch(View?MotionEvent)?[286行]?解決了之前一個問題,由于縮放比例是float所以計算有偏差,導致
?*?????????????????比較大小不準,會影響圖片滑動的便宜距離。
?*
?*
?*/
public?class?ClipImageView?extends?android.support.v7.widget.AppCompatImageView?implements
????????ScaleGestureDetector.OnScaleGestureListener?View.OnTouchListener?{
????private?final?Paint?mPaint;
????private?final?int?mMaskColor;
????private?int?mAspectX;
????private?int?mAspectY;
????private?final?int?mClipPadding;
????private?float?mScaleMax?=?4.0f;
????private?float?mScaleMin?=?2.0f;
????/**
?????*?初始化時的縮放比例
?????*/
????private?float?mInitScale?=?1.0f;
????/**
?????*?用于存放矩陣
?????*/
????private?final?float[]?mMatrixValues?=?new?float[9];
????/**
?????*?縮放的手勢檢查
?????*/
????private?ScaleGestureDetector?mScaleGestureDetector;
????private?final?Matrix?mScaleMatrix?=?new?Matrix();
????/**
?????*?用于雙擊
?????*/
????private?final?GestureDetector?mGestureDetector;
????private?boolean?isAutoScale;
????private?float?mLastX;
????private?float?mLastY;
????private?boolean?isCanDrag;
????private?int?lastPointerCount;
????private?final?RectF?mClipBorder?=?new?RectF();
????private?final?boolean?mDrawCircleFlag;
????public?ClipImageView(Context?context)?{
????????this(context?null);
????}
????public?ClipImageView(Context?context?AttributeSet?attrs)?{
????????super(context?attrs);
????????//不改變原圖的大小,從ImageView的左上角開始繪制原圖,?原圖超過ImageView的部分作裁剪處理??2018-02-02
????????setScaleType(ScaleType.MATRIX);
????????mGestureDetector?=?new?GestureDetector(context
????????????????new?SimpleOnGestureListener()?{
????????????????????@Override
????????????????????public?boolean?onDoubleTap(MotionEvent?e)?{
????????????????????????if?(isAutoScale)
????????????????????????????return?true;
????????????????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-12-04?17:28??ClipImageView\
?????文件?????????635??2019-12-04?17:39??ClipImageView\attrs.xm
?????文件???????20857??2019-12-04?17:27??ClipImageView\ClipImageView.java
- 上一篇:通過JSP實現 圖片上傳
- 下一篇:JDBCUtils所需jar包
評論
共有 條評論