安卓原生日历的月视图是可以上下滑动切换月份的,但是似乎还没有左右滑动切换年的功能,似乎只有ViewSwitcher才能完整这样的功能。
本文以先以个简单的例子来说明使用ViewSwitcher切换ListView与方法,这个例子是在stackoverflow上看到的,不知道运行起来是否完美,但是能说清楚用法;然后再讲讲我将这个方案用到日历中的时候遇到的性能问题。
一:ViewSwitcher切换ListView的例子
布局如下:
<ViewSwitcher> <LinearLayout> <ListView /> </LinearLayout> <LinearLayout> <ListView /> </LinearLayout> </ViewSwitcher>
代码:
public class MMGViewSwitcher extends ViewSwitcher{ private float startX = 0; private float startY = 0; private float endX = 0; private float endY = 0; public MMGViewSwitcher(Context context, AttributeSet attrs) { super(context,attrs); } @Override public boolean onTouchEvent(MotionEvent event) { String ActionString=""; switch(event.getActionMasked()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); startY = event.getY(); ActionString="ACTION_DOWN"; break; case MotionEvent.ACTION_MOVE: ActionString="ACTION_MOVE"; break; case MotionEvent.EDGE_LEFT: this.showNext(); break; case MotionEvent.EDGE_RIGHT: this.showPrevious(); break; case MotionEvent.ACTION_UP: endX = event.getX(); endY = event.getY(); if((startX > endX) && Math.abs(startX-endX)>30){ this.showNext(); } if((startX < endX) && Math.abs(startX-endX)>30){ this.showPrevious(); } ActionString="ACTION_UP"; break; } return true; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { onTouchEvent(ev); return false; } }
之所以举这个例子是因为这个例子给了我一点启示,翻遍所有资料,我都没发现MotionEvent
有这样两个成员变量:MotionEvent.EDGE_LEFT
,MotionEvent.EDGE_RIGHT,不知道好不好使但是记住这点以后总有用得到的地方。用在这里也许不好使,但是也许别的什么时候用得着呢。
二:日历的月视图中ViewSwitcher切换ListView遇到的性能问题
我发下日历用这种方法切换ListView的时候反应速度是极其的慢,难道ViewSwitcher只适合包装简单的View?因为我的两个ListView其实是共用一个adapter的不知道这会不会给程序带来负担。