• 大小: 6KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-14
  • 语言: Java
  • 标签: 头像裁剪  

资源简介

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.xml
     文件       20857  2019-12-04 17:27  ClipImageView\ClipImageView.java

评论

共有 条评论