改变图片局部透明度,实现透明度根据位置不而渐变

最近在做项目的时候遇到了一个需求,那就是要对一张图片做处理,实现边缘模糊过渡。

苦思良久,最终用了以下的方法。

1、构成一张图片的是ARGB,我们可以直接把这整张图片的ARGB取出来,然后改变图片的A,也就是透明度。

以上我们便获得了图片的ARGB值,而我们只需要改变透明度A。

2、我们可以用

最后一句实现了只改变图片的Alpha值,(argb[i] & 0x00FFFFFF)将A全部置为0,再与((int) alpha << 24)进行或运算,那么就可以将我们的Alpha值设置进去,我们将((int) alpha)左移24位便是为了不改变RGB。

3、最后通过下面代码创建改变了透明度的bitmap

 

而我需要实现的是边缘模糊过渡,因此需要让透明度随着图片的Y坐标渐渐变为0,即过渡区域为0.我的代码如下:

 以上便实现了图片的边缘过度。

参考:https://www.cnblogs.com/Anita9002/p/4207963.html

转载请标明处处:http://77blogs.com/?p=629

在非activity类调用startActivityForResult

对于这个问题,今天折腾了一下午,不是说我不懂得怎么调用,而是我用了看似正确的调用方式,而其实这是一个坑。

我用了下面这种方式:

用这种方式是正确的,必须要将context转换为Activity。

但是由于我是在一个特殊的场景里面使用的,导致activity的onActivityResult没有被回调。

 

接下来说说我的场景:

我在MainActivity里面创建了一个DialogActivity,在DialogActivity里面调用工具类utils的start()方法,该方法里面的语句就是((Activity) mContext).startActivityForResult,而DialogActivity里面的onActivityResult没有被回调。

 

调试了半天,发现DialogActivity传进utils的start方法的context是属于MainActivity的,因为DialogActivity在MainActivity里面启动的。这么说来,相当于是MainActivity调用了startActivityForResult,应该是MainAcvtivity的onActivityResult会被回调,可是结果也不会。

 

原来MainAcvtivity与要启动的Activity之间还隔着一个DialogActivity,返回的时候是返回到DialogActivity的,因此MainActivity的onActivityResult也不会被回调。

 

解决方法,不要传context去调用,传activity

总结:((Activity) mContext).startActivityForResult,context属于哪个Activity,那么便是哪个activity调用该方法,并且想要onActivityResult获得回调,两个Activity之间不能隔着其他Activity。

 

尊重劳动成果,转载请标明出处:http://77blogs.com/?p=630

Adapter刷新数据的坑

adapter刷新数据的时候,要能够刷新成功,要保证每次刷新的时候都是改变数据源。

于是,我这样做了,在适配器的构造方法里面写到:


 

刷新数据的时候调用adapter里面的方法:(用这种方法每次刷新都是改变adapter里面的数据源,保证每次都能够刷新成功,这种思路是没错的,然而,我犯放了一个错误,导致刷新后数据被清空了)


 

我犯了什么错误呢?

我的构造方法错了,在adapter的构造方法里面,我用的是

this.listItems = listItems;

这样子传进去的listItem与adapter里面的listItem指向同一个对象,在刷新数据的方法中,我用了


 

adapter里面的listItems被清空了,导致外部传进来的listItem也被清空了,于是this.listItems.addAll(listItems);后依然为空,最终刷新数据后无反应。

转载请标明出处:http://77blogs.com/?p=632