android反射获取listview,Android开发:仿通讯录ListView小例子

2.快速滚动图标的修改

Android Api并未公开修改图标的接口,本处通过调用Java的反射机制修改了快速滚动的图标。替换代码见MainAct类中的changeFastScrollerDrawable()。

补充:Android对ListView设置了优化,对于少于4页内容的List即使设置了fastScrollEnabled=true也不会显示FastScroller。

参考资料查看:/frameworks/base/core/java/android/widget/FastScroller.java:其中常量MIN_PAGES及其相关。

3.获取List中“咧牙”ImageView在屏幕中的绝对位置

代码如下:anchor为“咧牙”ImageView。

int[] location =newint[2];

anchor.getLocationOnScreen(location);

Rect anchorRect =newRect(location[0], location[1], location[0] + anchor.getWidth(),

location[1] + anchor.getHeight());

这个步骤也是为上箭头与下箭头的自动选择做好铺垫。

4.为快捷按钮组成的LinearLayout设置反弹动画

设置LinearLayout沿直线轨迹从从屏幕右边滑动到左边这个部分的动画定义文件是res/anim/anim_actionslayout.xml,代码如下:

android:fromXDelta="100%p"

android:toXDelta="0"

android:duration="@android:integer/config_longAnimTime"

>

需要反弹的效果还得对Animation设定Interpolator(插值器),插值器的设定需要一些数学基础了,得找到合适的函数对动画速率进行修正。本例中使用的插值器代码如下:

package lab.sodino.list_quickaction;

import android.util.Log;

import android.view.animation.Interpolator;

/**

* @author Sodino E-mail:sodinoopen@hotmail.com

* @version Time:2011-5-3 下午08:02:01

*/

public class CustomInterpolator implements Interpolator {

/**

* @param input

*            A value between 0 and 1.0 indicating our current point in the

*            animation where 0 represents the start and 1.0 represents the

*            end

* @return Returns The interpolation value. This value can be more than 1.0

*         for Interpolators which overshoot their targets, or less than 0

*         for Interpolators that undershoot their targets.

*/

public float getInterpolation(float input) {

Log.d("ANDROID_LAB", "input=" + input);

// 设定动画的加速度变化值。此例的效果是使用actionsLayout超过目标旋转区后再反弹回来。

// 插值计算公式: 1.2-((x*1.55f)-1.1)^2

// 画出函数图的话即可观察出动画执行过程中越过目标区再反弹的详细过程。

// x :0<= v<= 1.0

// (x*1.55f) :0<= v<= 1.55

// ((x*1.55f)-1.1) :-1.1<= v<= 0.45

// ((x*1.55f)-1.1)^2 :0<= v<= 1.21

// 1.2-((x*1.55f)-1.1)^2 :-0.1<= v<= 1.2

final floatinner= (input * 1.55f) - 1.1f;

// 如果返回值为常量1的话,则相当于没有动画效果。

return 1.2f - inner * inner;

}

}0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值