• android 模糊背景 异型背景


    模糊算法参考:

    http://blog.csdn.net/markl22222/article/details/10313565

    网上很多,这东西是个概念理解,没有什么新鲜的。

    轮子有现成的,模糊算法无非是java和jni实现。有兴趣可以自己写一遍。这里直接用现成的了。

    compile 'net.qiujuer.genius:blur:2.0.0-beta4'

    实现在头部虚化。1.获得bitmap,2.对bitmap处理生成虚化图像,3.应用。

    获取图片,可以http请求完成。但现在都是图片框架,没有必重新去写下载。

    此处使用Glide下载 。代码如下:

    Glide.with(getActivity()).load("http://img4.duitang.com/uploads/item/201509/04/20150904010805_inyuE.jpeg")
    .asBitmap().into(new SimpleTarget<Bitmap>() {
    @Override
    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
    Bitmap bitmap =StackBlur.blurNativelyPixels(resource, 50, false);
    //set to imageview
    }
    });

    是不是很轻松~

    代码运行起来。

    图片处理还是比较慢的。你会发现,背景会慢一会儿出现,也还算正常 。

    但后来想想,Glide给了transform()方法,还是有缓存的。

    为什么不用。然后代码改为:

    ackage com.lechang.utils;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    
    import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
    import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
    
    import net.qiujuer.genius.blur.StackBlur;
    
    public class GlideBlurTransform extends BitmapTransformation {
        public GlideBlurTransform(Context context) {
            super(context);
        }
    
        @Override
        protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
            return blurImage(pool, toTransform);
        }
    
        private static Bitmap blurImage(BitmapPool pool, Bitmap source) {
            if (source == null) return null;
            return StackBlur.blurNativelyPixels(source, 50, false);
        }
    
        @Override
        public String getId() {
            return getClass().getName();
        }
    }
    Glide.with(getActivity())
    .load("http://img4.duitang.com/uploads/item/201509/04/20150904010805_inyuE.jpeg")
    .transform(new GlideBlurTransform(getActivity()))
    .into(ivBg);

    这样有了缓存,每次进来也不用等了。

    现在来实现

    斜着的一块白色背景

    简单的方法美术切一块白色多边形往上面一铺。

    但我觉得应该有好的方法,还省资源。那就自定义一个bitmap

    public static Bitmap getPathBitmap(int w, int h) {
    
    
            Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444);
            Paint paint = new Paint();
            Path path = new Path();
            path.moveTo(0, 2 * h / 3); // 此点为多边形的起点
            path.lineTo(w, 0);
            path.lineTo(w, h);
            path.lineTo(0, h);
            // 使这些点构成封闭的多边形
            path.close();
            Canvas canvas = new Canvas(bitmap);
            paint.setColor(Color.WHITE);
            paint.setAntiAlias(true);
            // 绘制这个多边形
            canvas.drawPath(path, paint);
            return bitmap;
        }

    最后圆形头像,不多说了,看这篇:http://www.cnblogs.com/mamamia/p/7814404.html

    切圆算法:

      private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
            if (source == null) return null;
    
            int size = Math.min(source.getWidth(), source.getHeight());
            int x = (source.getWidth() - size) / 2;
            int y = (source.getHeight() - size) / 2;
    
            // TODO this could be acquired from the pool too
            Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
    
            Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
            if (result == null) {
                result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
            }
    
            Canvas canvas = new Canvas(result);
            Paint paint = new Paint();
            paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
            paint.setAntiAlias(true);
            float r = size / 2f;
            canvas.drawCircle(r, r, r, paint);
            return result;
        }

    最终效果

  • 相关阅读:
    【大厂面试】字节跳动、京东等大厂面试题分享,已拿字节offer~
    听说这十道面试题,把百分之八十的程序员都淘汰了?不是吧,阿sir
    阿里大神的刷题笔记.pdf
    在家学了6个月,拿到阿里offer!
    【面试题】2020年底总结200道带答案的常见Java面试题!
    面试一家小公司,被问了 1 个小时并发编程。。全程已记录!
    分享一份技术书籍《Java 8 》PDF版,可自行下载
    Delphi的TDataSetProvider、TDataSet、TAdoQuery、TDataSource、TDataModule控件的组合使用
    初学Delphi与sql server的存储过程
    delphi简单的分页实现(高手可以不看)
  • 原文地址:https://www.cnblogs.com/mamamia/p/7910655.html
Copyright © 2020-2023  润新知