Android 视图切换效果

网友投稿 786 2022-12-01

Android 视图切换效果

Android 视图切换效果

我们先来看看效果图:

上述截图,是手指拖动的效果,如果拖动过屏幕中点,松手后就会自动移动到第二屏。另外,如果使用轻扫手势,也可以自动移动下一屏。

Android中的

View有两个子类,

Widget和

ViewGroup,

Widget是可见的窗口组件,比如按钮,

ViewGroup就是布局,

ViewGroup已经提供了多个布局子类,比如

LinearLayout等。

本例中实现了自己的

ViewGroup子类。通过覆盖

onLayout方法实现对子视图的横向排列布局:

Java代码

1. package eoe. result;2. 3. @Override4. protected void onLayout(boolean changed, int left, int top, int right,5. int bottom) {6. Log.d(TAG, ">>left: " + left + " top: " + top + " right: " + right7. + " bottom:" + bottom);8. 9. /**10. * 设置布局,将子视图顺序横屏排列11. */12. for (int i = 0; i < getChildCount(); i++) {13. View child = getChildAt(i);14. child.setVisibility(View.VISIBLE);15. child.measure(right – left, bottom – top);16. child.layout(0 + i * getWidth(), 0, getWidth() + i * getWidth(),17. getHeight());

复制代码

通过覆盖

computeScroll方法,计算移动屏幕的位移和重新绘制屏幕:

Java代码:

1. package eoe. result;2. 3. @Override4. public void computeScroll() {5. if (scroller.computeScrollOffset()) {6. scrollTo(scroller.getCurrX(), 0);7. postInvalidate();8. }9. }

复制代码

编写了一个名为

scrollToScreen的方法,用于根据指定屏幕号切换到该屏幕:

Java代码:

1. /**2. * 切换到指定屏3. *4. * @param whichScreen5. */6. public void scrollToScreen(int whichScreen) {7. if (getFocusedChild() != null && whichScreen != currentScreenIndex8. && getFocusedChild() == getChildAt(currentScreenIndex)) {9. getFocusedChild().clearFocus();10. }11. 12. final int delta = whichScreen * getWidth() – getScrollX();13. scroller.startScroll(getScrollX(), 0, delta, 0, Math.abs(delta) * 2);14. invalidate();15. 16. currentScreenIndex = whichScreen;17. }

复制代码

snapToDestination方法,是处理当屏幕拖动到一个位置松手后的处理:

Java代码:

1. /**2. * 根据当前x坐标位置确定切换到第几屏3. */4. private void snapToDestination() {5. scrollToScreen((getScrollX() + (getWidth() / 2)) / getWidth());6. }

复制代码

然后说说手势事件的处理。

eric的实现,全部使用

onTouch事件处理,这样代码不够简明。因为需要记录很多组合手势的历史数据,这样就必须有一些状态位,一些坐标数值。

我用

GestureDetector的手势处理事件简化了这方面的处理,只在手势抬起(

UP)事件处理中在

ouTouchEvent方法中做了处理。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:送呆萌的她一个皮卡丘(Python实现)
下一篇:android隐藏与现实键盘
相关文章

 发表评论

暂时没有评论,来抢沙发吧~