2019-09-01 第九周 - Fragment回退栈的应用场景

10月5 山东海阳
晚8点半 降温

气温骤降,T恤一瞬间就不能穿了,假期马上就要结束了,马上又要从家里回去,有点不舍,今天做了一点之前的小天盒子项目,然后看了一点数据库的东西。

最近买了一本新书,是将Android自定义控件的开发,利用空闲时间看了第一章,主要是对于画笔和画布的一些基本知识的讲解,然后又抽空写了一篇关于原型头像的实现的文章。

文章分享

圆形头像的两种实现方法,原型头像在各种app中经常出现,大部分app都会选择使用圆形和圆角矩形作为头像,对于实现这两种效果的头像,其实思路是一样的,只是形状不一样,在这篇文章中采用了两种方法来实现。

XferMode和Clip

其中前者是类似于图层的叠加效果,最近在做图标着色功能,其中着色时候就有色彩的叠加效果。通常SRC_IN就可以满足我们的要求。

后者是一种更巧妙的方法,是借助于画布的裁剪效果来实现的,首先把画布裁剪成想要的形状,然后填满整个画布即可。

其实实现圆形头像还有很多方法,在这里就不多说了。

小Tip

经常在项目中封装Fragment来使用,但是在回退的时候要将Fragment挨个出栈的时候发现没法实现,后来查了一下是要用到回退栈。


    public void open(Fragment fragment) {
        if(activity.fContainer() == activity.NULL_CONTAINER){
            throw new IllegalArgumentException("fragment container is error");
        }else{
            ft = fm.beginTransaction();
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            ft.addToBackStack(null);
            ft.add(activity.fContainer(),fragment).commit();
        }
    }

上面这一段代码是打开一个fragment的时候的操作,关键位置在add fragment之前调用addToBackStack()方法

这个方法就是用来记录进栈的,并且我们可以指定一个名字作为栈内元素的标识。


2019-09-01 第九周 - Fragment回退栈的应用场景_第1张图片

当我们出栈的时候。

 public void close() {
        ft = fm.beginTransaction();
        if(fm.getBackStackEntryCount() > 0){
            fm.popBackStackImmediate();
        }
    }

在出栈的时候要看栈内的元素数量,如果有的话,要调用pop方法出栈。


2019-09-01 第九周 - Fragment回退栈的应用场景_第2张图片

你可能感兴趣的:(2019-09-01 第九周 - Fragment回退栈的应用场景)