- 浏览: 5827004 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
有时候标题栏会浮在内容之上,而内容会有颜色的变化,这时候就要求标题栏能够变化透明度,标题栏中的图片能够变化颜色。看下效果,如下图:
描述
当界面往下划的时候,我们需要做的是
将标题栏是从全透明往全不透明转变
将标题栏中的图片从白色往主题色转变
当界面往上时,就反过来转变界面。
编写步骤
我们的demo的布局是标题栏在recyclerView的上方,布局如下
我们只需要3个步骤:
1.监听recyclerView的滑动
2.滑动时计算出位移的百分比
3.根据百分比来操作标题栏背景和图片
准备工作
在Activity的onCreate里初始化下视图,获取view对象,获取标题栏的背景图,图片的drawble对象等
重点说明下mutate这个方法。一开始我修改标题栏的透明度时没有调用mutate方法,导致所有界面的标题栏都透明度都改变了。
Drawable mutate ()
Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification. Calling this method on a mutable Drawable will have no effect.
大意就是使当前这个drawable变为易变的,一个易变的drawable被授权不去与其他的drawable共享状态。从资源载入的所有drawble都是共享一个状态实例,只要有一个修改了,其他的使用到该drawable的实例也会被修改。调用了这个方法后我们对drawable的修改就不会影响到其他实例了。
监听recyclerView的滑动
然后对RecyclerView设置滑动监听
计算位移百分比
根据百分比来操作标题栏背景和图片
argbEvaluator是用来计算开始颜色和结束颜色的中间颜色的
ColorFilter是对Drawable设置一个色彩过滤器。这是一个抽象类不能直接使用,他有三个子类:ColorMatrixColorFilter, LightingColorFilter, PorterDuffColorFilter 。我们先看下描述
ColorMatrixColorFilter 一个通过4*5的颜色矩阵来改变颜色的颜色过滤器
A color filter that transforms colors through a 4x5 color matrix. This filter can be used to change the saturation of pixels, convert from YUV to RGB, etc.
LightingColorFilter 一个可以模拟简单的灯光效果的颜色过滤器
A color filter that can be used to simulate simple lighting effects. A LightingColorFilter is defined by two parameters, one used to multiply the source color (called colorMultiply) and one used to add to the source color (called colorAdd). The alpha channel is left untouched by this color filter. Given a source color RGB, the resulting R'G'B' color is computed thusly:
PorterDuffColorFilter 一个可以使用单个颜色和指定Porter-Duff模式来对源像素进行染色颜色过滤器
A color filter that can be used to tint the source pixels using a single color and a specific Porter-Duff composite mode.
我们就是需要根据位移百分比来对drawable进行颜色变化,就选用PorterDuffColorFilter(为啥说的这么简单?因为ColorMatrixColorFilter,LightingColorFilter我看的有点懵逼)
Porter-Duff模式
说明文档 ,这个没啥好的中文翻译,我看到一句:Porter-Duff 操作是 1 组 12 项用于描述数字图像合成的基本手法。用人话讲就是:2张图要放在一张画板上,这两张图需要融合在一起,融合的方法有12个,他们统称Porter-Duff。具体的融合方法请仔细看下图
我们需要保持原来图片的形状,而切换图片的颜色,选择PorterDuff.Mode.SRC_IN就可以了,如果理解不了,自己按照图片多跑几个模式就知道了。
最后将colorFilter应用到对应的drawable上.图片颜色的变换就完成啦
http://www.jianshu.com/p/b974a2c88cd9
描述
当界面往下划的时候,我们需要做的是
将标题栏是从全透明往全不透明转变
将标题栏中的图片从白色往主题色转变
当界面往上时,就反过来转变界面。
编写步骤
我们的demo的布局是标题栏在recyclerView的上方,布局如下
我们只需要3个步骤:
1.监听recyclerView的滑动
2.滑动时计算出位移的百分比
3.根据百分比来操作标题栏背景和图片
准备工作
在Activity的onCreate里初始化下视图,获取view对象,获取标题栏的背景图,图片的drawble对象等
public class MainActivity extends AppCompatActivity { Drawable headBg ; Drawable iv1Drawable ; Drawable iv2Drawable ; RecyclerView rv; RelativeLayout rlHead; private int scrollY; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * 初始化工作 */ rv = (RecyclerView) findViewById(R.id.rv); rv.setLayoutManager(new LinearLayoutManager(this)); rv.setAdapter(new SimpleAdapter()); rlHead = (RelativeLayout) findViewById(R.id.rl_head); headBg = rlHead.getBackground().mutate();//获取head的背景drawable iv1Drawable = ((ImageView)findViewById(R.id.iv1)).getDrawable().mutate();//获取图片的drawable iv2Drawable = ((ImageView)findViewById(R.id.iv2)).getDrawable().mutate();//获取图片的drawable } }
重点说明下mutate这个方法。一开始我修改标题栏的透明度时没有调用mutate方法,导致所有界面的标题栏都透明度都改变了。
Drawable mutate ()
Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification. Calling this method on a mutable Drawable will have no effect.
大意就是使当前这个drawable变为易变的,一个易变的drawable被授权不去与其他的drawable共享状态。从资源载入的所有drawble都是共享一个状态实例,只要有一个修改了,其他的使用到该drawable的实例也会被修改。调用了这个方法后我们对drawable的修改就不会影响到其他实例了。
监听recyclerView的滑动
然后对RecyclerView设置滑动监听
//给recyclerView一个滚动监听 rv.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { //我们这里是竖向滑动,只需要关注dy即可 //dy是每次滑动事件触发后,跟上次y位置的差值 } });
计算位移百分比
/** * @param dy * @return 0~1 ,滑动距离越大,值越大 */ private float calcFraction(int dy){ //这里的300是图片的高度,图片滚完后就是100% float imgHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics()); float toolbarHeight = rlHead.getHeight(); float maxHeight = imgHeight - toolbarHeight; //图片从头到尾移动的距离 scrollY += dy; //dy是这次移动的距离,每次移动的距离加起来就是总移动的距离,dy是有正有负的.scrollY是Activiy的成员对象 if (scrollY >= maxHeight) { return 1.0f; } else if (scrollY <= 0) { return 0f; } else { return scrollY/maxHeight; } }
根据百分比来操作标题栏背景和图片
private void setUI(float fraction){ //背景只需要设置透明度,255是全不透明 headBg.setAlpha((int) (fraction*255)); //这个headBg是标题栏 //This evaluator can be used to perform type interpolation between integer values that represent ARGB colors. //这个求值器用来执行计算用整形表示的颜色的差值 ArgbEvaluator argbEvaluator = new ArgbEvaluator(); int startColor = ActivityCompat.getColor(MainActivity.this,R.color.colorPrimary); int endColor = Color.WHITE; //根据fraction计算出开始和结束中间的色值 int calcColor = (int) argbEvaluator.evaluate(fraction, startColor, endColor); ColorFilter colorFilter = new PorterDuffColorFilter(calcColor, PorterDuff.Mode.SRC_IN); //应用颜色过滤器 iv1Drawable.setColorFilter(colorFilter); iv2Drawable.setColorFilter(colorFilter); }
argbEvaluator是用来计算开始颜色和结束颜色的中间颜色的
ColorFilter是对Drawable设置一个色彩过滤器。这是一个抽象类不能直接使用,他有三个子类:ColorMatrixColorFilter, LightingColorFilter, PorterDuffColorFilter 。我们先看下描述
ColorMatrixColorFilter 一个通过4*5的颜色矩阵来改变颜色的颜色过滤器
A color filter that transforms colors through a 4x5 color matrix. This filter can be used to change the saturation of pixels, convert from YUV to RGB, etc.
LightingColorFilter 一个可以模拟简单的灯光效果的颜色过滤器
A color filter that can be used to simulate simple lighting effects. A LightingColorFilter is defined by two parameters, one used to multiply the source color (called colorMultiply) and one used to add to the source color (called colorAdd). The alpha channel is left untouched by this color filter. Given a source color RGB, the resulting R'G'B' color is computed thusly:
PorterDuffColorFilter 一个可以使用单个颜色和指定Porter-Duff模式来对源像素进行染色颜色过滤器
A color filter that can be used to tint the source pixels using a single color and a specific Porter-Duff composite mode.
我们就是需要根据位移百分比来对drawable进行颜色变化,就选用PorterDuffColorFilter(为啥说的这么简单?因为ColorMatrixColorFilter,LightingColorFilter我看的有点懵逼)
Porter-Duff模式
说明文档 ,这个没啥好的中文翻译,我看到一句:Porter-Duff 操作是 1 组 12 项用于描述数字图像合成的基本手法。用人话讲就是:2张图要放在一张画板上,这两张图需要融合在一起,融合的方法有12个,他们统称Porter-Duff。具体的融合方法请仔细看下图
我们需要保持原来图片的形状,而切换图片的颜色,选择PorterDuff.Mode.SRC_IN就可以了,如果理解不了,自己按照图片多跑几个模式就知道了。
最后将colorFilter应用到对应的drawable上.图片颜色的变换就完成啦
http://www.jianshu.com/p/b974a2c88cd9
发表评论
-
NestedScrollView滚动到顶部固定子View悬停挂靠粘在顶端
2018-10-31 20:45 7016网上有一个StickyScrollView,称之为粘性Scro ... -
自定义Behavior实现AppBarLayout越界弹性效果
2017-03-31 09:33 10387一、继承AppBarLayout.Beha ... -
Android - 一种相似图片搜索算法的实现
2017-03-31 09:33 2633算法 缩小尺寸。 将图片缩小到8x8的尺寸,总共64个 ... -
使用SpringAnimation实现带下拉弹簧动画的 ScrollView
2017-03-30 11:30 2860在刚推出的 Support Library 25.3.0 里面 ... -
Android为应用添加角标(Badge)
2017-03-30 11:21 61971.需求简介 角标是什么意思呢? 看下图即可明了: 可 ... -
Android端与笔记本利用局域网进行FTP通信
2017-03-23 10:17 991先看图 打开前: 打开后: Activity类 ... -
ColorAnimationView 实现了滑动Viewpager 时背景色动态变化的过渡效果
2017-02-24 09:41 2233用法在注释中: import android.anima ... -
迷你轻量级全方向完美滑动处理侧滑控件SlideLayout
2017-01-16 16:53 2602纯手工超级迷你轻量级全方向完美滑动处理侧滑控件(比官方 sup ... -
Effect
2017-01-05 09:57 0https://github.com/JetradarMobi ... -
动态主题库Colorful,容易地改变App的配色方案
2016-12-27 14:49 2573Colorful是一个动态主题库,允许您很容易地改变App的配 ... -
对视图的对角线切割DiagonalView
2016-12-27 14:23 1127提供对视图的对角线切割,具有很好的用户定制 基本用法 ... -
仿淘宝京东拖拽商品详情页上下滚动黏滞效果
2016-12-26 16:53 3506比较常用的效果,有现成的,如此甚好!:) import ... -
让任意view具有滑动效果的SlideUp
2016-12-26 09:26 1713基本的类,只有一个: import android.a ... -
AdvancedWebView
2016-12-21 09:44 16https://github.com/delight-im/A ... -
可设置圆角背景边框的按钮, 通过调节色彩明度自动计算按下(pressed)状态颜色
2016-11-02 22:13 1935可设置圆角背景边框的的按钮, 通过调节色彩明度自动计算按下(p ... -
网络请求库相关
2016-10-09 09:35 62https://github.com/amitshekhari ... -
ASimpleCache一个简单的缓存框架
2015-10-26 22:53 2186ASimpleCache 是一个为android制定的 轻量级 ... -
使用ViewDragHelper实现的DragLayout开门效果
2015-10-23 10:55 3427先看一下图,有个直观的了解,向下拖动handle就“开门了”: ... -
保证图片长宽比的同时拉伸图片ImageView
2015-10-16 15:40 3743按比例放大图片,不拉伸失真 import android. ... -
向上拖动时,可以惯性滑动显示到下一页的控件DragLayout
2015-10-16 14:53 5589仿照淘宝和聚美优品,在商品详情页,向上拖动时,可以加载下一页。 ...
相关推荐
在项目实践中,通常会将这些特效封装到自定义View或者Drawable中,以便在多个地方复用。同时,为了保持性能,需要注意合理使用滤镜,避免在大量动态绘制或者频繁更新的场景下使用过于复杂的滤镜效果,以免影响应用的...
在Android中,通常使用BitmapFactory.decodeXXX系列方法从资源、文件或流中加载Bitmap。为了优化内存使用,可以使用BitmapFactory.Options对象设置解码参数,如缩放比例和格式。 三、图像裁剪与旋转 Bitmap提供了...
图片滤镜在Android中可以通过多种方式实现,其中最常用的是使用`BitmapShader`和`PorterDuffColorFilter`。`BitmapShader`可将Bitmap应用为Shader,改变图片的渲染效果。而`PorterDuffColorFilter`则可以改变图像的...
在项目中,"透明指示层_高亮"这个文件很可能是包含了高亮形状的图片资源,可能是一个PNG或者XML矢量图。如果是PNG,你可以在ImageView中加载它,并根据需要调整位置和大小;如果是XML矢量图,你可以使用...
开发者可能使用ColorMatrixColorFilter或者PorterDuffColorFilter来实现颜色的变化效果。 “改变屏幕的亮度”涉及到Android系统的电源管理和DisplayManager服务。开发者可以通过Settings.System类来读取和修改设备...
综上所述,这个压缩包可能涵盖了上述的一些或所有知识点,通过研究这些源码,开发者不仅可以了解Android图像处理的基本原理,还能学习到如何在实际项目中高效、优化地实现图片特效。对于提升Android应用的用户体验和...
本教程将深入讲解如何在Android中使用Bitmap进行位图操作,以实现一个具有蒙板效果的类进度条程序。 首先,我们需要了解Bitmap对象在Android中的基本用法。Bitmap是Android系统中处理图像的主要类,它提供了对像素...
1. **颜色过滤器**:在Android中,可以使用颜色过滤器(ColorFilter)来改变View或Bitmap的颜色。它可以通过多种方式创建,如MatrixColorFilter、PorterDuffColorFilter等。源码中可能包含了如何设置和应用颜色过滤...
在Android开发中,"防iOS毛玻璃效果"通常是指避免或模仿iOS系统中的"模糊效果",也称为"毛玻璃效果"(Blur Effect)。这种效果在iOS中常见于背景视图,...在实际项目中,应根据目标用户群和应用的风格选择合适的方法。
在Android开发中,图片特效处理是一项重要的技能,它涉及到用户界面的美观度和用户体验的提升。这个"android常用图片特效...在实际项目中,开发者可以根据需求选择合适的技术,结合第三方库,高效地实现各种图片特效。
对于Vector Drawables,你可以通过设置`app:tint`属性在XML布局中或在代码中使用`setTint()`方法来改变颜色: ```xml android:src="@drawable/your_vector_drawable" android:tint="@color/your_color" /> ```...
在"myViewdemo"这个项目中,我们可以找到具体的代码实现。开发者可能已经创建了一个自定义View类,覆盖了onDraw()方法,用以绘制无锯齿的进度条,并且可能已经使用了颜色过滤或自定义Drawable来改变进度条的颜色。...
"customviewdemo"可能是一个包含自定义View的示例项目,开发者可能在此项目中展示了如何使用`Paint`进行图形绘制。通常,这样的项目会包含自定义的View类,其中`onDraw()`方法利用`Paint`对象进行各种图形的绘制,...
在Android中,我们可以通过Canvas对象的drawARGB()方法或者PorterDuffColorFilter来实现混合模式。这个自定义控件可能利用了这些技术,使进度条在移动时改变其下方文字的颜色。 其次,Android中的自定义控件通常...
这个项目源码提供了关于如何在Android中添加这些效果的实例。以下是一些关键知识点: 1. **LayerDrawable**: Android中的`LayerDrawable`允许你将多个`Drawable`对象叠加在一起,可以用来创建具有阴影效果的图片。...
在Android中,我们可以使用多种方法来修改图像的HSB属性。一种常见的方式是使用`ColorMatrix`类。这个类允许我们创建一个5x4的矩阵,通过矩阵运算改变颜色的各个属性。例如,要改变图像的色调,我们可以调整色相分量...
1. **JNI注册**:在Java类中使用 `@Override` 注解的方法,这些方法会在JNI初始化时自动注册。 2. **JNI头文件生成**:使用 `javah` 工具或Android Studio的Gradle插件自动生成C/C++头文件,其中包含了Java方法的C/...
以上代码展示了如何将图片裁剪成圆形的基本思路,通过在`onDraw()`方法中先绘制一个圆形遮罩,然后将图片绘制在这个遮罩之上。通过`PorterDuff`模式,我们可以使图片仅在圆形区域内显示,从而达到裁剪效果。 除了...
- **颜色创建**:在Android中,可以使用`Color`类的静态方法`rgb()`或`argb()`来创建颜色。`rgb()`接收红、绿、蓝三个参数,`argb()`则额外包含一个透明度(Alpha)参数。 - **颜色转换**:除了RGB,Android还支持...
在实际使用中,开发者可能需要花费时间调试和优化代码,使其能够适应特定的环境和需求。 通过理解以上关键概念和技术,开发者可以创建出独特的高斯模糊渐变滑动效果,提高Android应用的视觉吸引力和用户体验。对于...