2019-09-01 第九周 - Fragment回退栈的应用场
2019-10-05 本文已影响0人
做梦枯岛醒
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()方法
这个方法就是用来记录进栈的,并且我们可以指定一个名字作为栈内元素的标识。
当我们出栈的时候。
public void close() {
ft = fm.beginTransaction();
if(fm.getBackStackEntryCount() > 0){
fm.popBackStackImmediate();
}
}
在出栈的时候要看栈内的元素数量,如果有的话,要调用pop方法出栈。