Android 开发艺术探索笔记(8)

Binder连接池
当一个项目很庞大的时候,可能会用到很多的Service和AIDL接口,这会显得很难管理。
这时候我们采用Binder连接池,将所有的AIDL放在一个Service来管理。每个模块只需要创建并实现AIDL及其细节,然后向服务端发送自己的唯一标志。服务端用queryBinder来找到对应的Binder并返回这个对象,当这个模块得到Binder的时候就可以。
Android 开发艺术探索笔记(8)_第1张图片
步骤是:(假定有两个AIDL)
1. 声明两个AIDL
2. 实现两个AIDL的接口
3. 声明连接池的ADIL,里面的方法为 IBinder queryBinder(int binderCode) binderCode就是唯一标志符。通过客户端传入唯一标志来获得对应的IBinder
4. 实现queryBinder方法
5. 创建并完成远程Service方法。
5. 实现连接池的具体细节,它内部要去绑定Service,绑定成功后,客户端就可以通过它的query方法去取得想要的Binder,然后就能进行操作。

IPC各种方法的优缺点
Android 开发艺术探索笔记(8)_第2张图片

View事件体系

Android3.0后增加了x、y、translationX、translationY
x、y是view左上角的坐标,tX、tY是View左上角相对父View的偏移量,默认值是0
x = tX + left , y = tY + top
在View进行平移的时候,改变的是x、y、tX、tY,而原始的top、left并不会改变

MotionEvent:
- ACTION_DOWN:手指刚接触屏幕
- ACTION_MOVE:手指在屏幕上滑动
- ACTION_UP:手指从屏幕上松开的一瞬间
正常情况下,一次触摸屏幕都会触发一系列的点击事件
系统提供了两种方法 getX/getY 返回相对于当前View的x、y坐标
getRowX/getRowY返回相对于当前手机屏幕的 x、y坐标

TouchSlop:
TouchSlop是系统能够识别的最小滑动距离。可以通过ViewConfiguration.get(getContext()).getScaledTouchSlop()来查看这个值。

VelocityTracker:
速度追踪,用于追踪手指在滑动过程中的速度,包括水平速度和竖直方向的速度,在onTouchEvent中追踪:

VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

接着通过上述追踪可以求出滑动速度

velocityTacker.computerCurrentVelocity(1000);
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();

首先computerCurrentVelocity()表示的是设置的时间,我们求速度一般要算间隔时间,手指在t s内划过的像素点就是速度。这里设置的时间间隔就是1s。
不需要的时候可以通过 clear()来清除

GestureDetector
手势检测,我们首先要创建一个GuestDetector对象并且实现OnGestureListener接口,根据需要我们还可以加入OnDoubleTapListener从而能够监听我们双击行为。

GestureDetector mGestureDetector = new GestureDetector(this);
//onTouchevent中来声明
 public boolean onTouchEvent(MotionEvent event) {
        //解决长按屏幕后无法拖动的现象
        mGestureDetector.setIsLongpressEnabled(true);
        boolean consume = mGestureDetector.onTouchEvent(event);
        return consume;
    }

Scroller:
弹性活动对象,用于实现View的弹性滑动,需要和View的computeScroll方法配合使用才能完成。它的典型代码是固定的。下一节将~

你可能感兴趣的:(Android,开发艺术探索)