登录  /  注册
Android 设计一个菱形形状的Imageview组件.
巴扎黑
巴扎黑 2017-04-17 17:49:03
[Android讨论组]

网上没有资料,特来请教下大神

巴扎黑
巴扎黑

全部回复(4)
伊谢尔伦

使用PorterDuffXfermode, 可以看看图像合成Xfermode和任意形状ImageView

public class RectImageView extends ImageView {
    private Paint mPaint;
    private Xfermode mXfermode;
    private Bitmap mRectMask;

    public RectImageView(Context context) {
        this(context, null);
    }

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

    public RectImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setColor(Color.RED);
        // 关键方法
        mXfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        createMask();
    }

    private void createMask() {
        if (mRectMask == null) {
            int maskWidth = getMeasuredWidth();
            int maskHeight = getMeasuredHeight();
            mRectMask = Bitmap.createBitmap(maskWidth, maskHeight, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(mRectMask);
            canvas.translate(maskWidth / 2, 0);
            canvas.rotate(45);
            int rectSize = (int) (maskWidth / 2 / Math.sin(Math.toRadians(45)));
            canvas.drawRect(0, 0, rectSize, rectSize, mPaint);
        }
    }


    @Override
    protected void onDraw(Canvas canvas) {
        int id = canvas.saveLayer(0, 0, canvas.getWidth(), canvas.getHeight(), null, Canvas.ALL_SAVE_FLAG);
        super.onDraw(canvas);
        // 关键方法
        mPaint.setXfermode(mXfermode);
        canvas.drawBitmap(mRectMask, 0, 0, mPaint);
        mPaint.setXfermode(null);
        canvas.restoreToCount(id);
    }
}

效果如下

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号