安卓开发 根据view布局动态生成带文字头像

根据view布局动态生成带文字头像

现在很多软件在没设置头像的时候都会根据用户的名字生产一个头像展示,类似钉钉,下面就看看在安卓里面如何做到这样的效果吧。

可能下面方法不是最佳,但是思路应该没问题。

根据view生成Bitmap

要动态生成文字头像,最先想到的应该是使用layout布局吧。

每次用户名发生改变的时候通过布局修改文字,而要做到头像效果,接下来将布局变成 bitmap就可以去填充imageview了。

下面是一个将view转成bitmap的方法,用BitmapFactory.Options也可以(可能会更好一些)。

    public static Bitmap getViewBitmap(View addViewContent, float scanX, float scanY) {

        addViewContent.setDrawingCacheEnabled(true);

        addViewContent.measure(
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

        addViewContent.layout(0, 0,
                addViewContent.getMeasuredWidth(),
                addViewContent.getMeasuredHeight());

        addViewContent.buildDrawingCache();
        Bitmap bitmap = addViewContent.getDrawingCache();

        int width = bitmap.getWidth();
        int height = bitmap.getHeight();

        //缩放矩阵
        Matrix matrix = new Matrix();
        matrix.postScale(scanX, scanY);

        Bitmap newBitmap = Bitmap.createBitmap(bitmap,0,0,width,height,matrix,false);
        if (!bitmap.isRecycled()) {
            bitmap.recycle();
        }
        return newBitmap;
    }

这里会有一个问题,直接给根布局设置背景图片会使布局失真,背景图片会以原大小显示,可以将背景图片放到imageview中去。

根据Bitmap生成Drawable

下面就是填充数据,并通过上面方法生成Drawable了。

    private Drawable getDefaultIcon(String name) {
        //添加默认头像
        @SuppressLint("InflateParams")
        View defaultIconView = LayoutInflater.from(getApplicationContext())
                .inflate(R.layout.item_default_icon, null);
        TextView text = defaultIconView.findViewById(R.id.text);
        if (TextUtils.isEmpty(name)) {
            text.setText("无");
        }else {
            text.setText(name.substring(0, 1));
        }
        Bitmap defaultIcon = ResourceUtil.getViewBitmap(defaultIconView, 1f, 1f);
        return new BitmapDrawable(getResources(), defaultIcon);
    }

使用Glide进行加载,生成默认头像

如何判断是否有设置好的头像呢?其实 glide 在这方面就很实用。

通过 Glide的RequestOptions可以设置很多东西,里面就可以设置我们定义的非正常头像,例如加载前、url为空、加载失败的图片。

            //生成默认头像(忽略拼音变量,这是不好的习惯)
            Drawable defaultIcon = getDefaultIcon(wgyData.get(i).getName());

            //加载头像
            ImageView imageView = markerView.findViewById(R.id.icon);
            Glide.with(WgyMapActivity.this)
                    .load(wgyData.get(i).getPhotoUrl())
                    .apply(new RequestOptions()
                            .placeholder(defaultIcon)    //加载前
                            .fallback(defaultIcon)       //url为空
                            .error(defaultIcon)          //加载失败
                            .transform(new CircleCrop())       //圆角
                            .skipMemoryCache(true)
                            .diskCacheStrategy(DiskCacheStrategy.NONE)
                            .centerCrop()
                    )
                    .into(imageView);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值