• android自定义View_2——Making the View Interactive


    前言:绘制出一个view只是自定义view的一个部分,还需要自定义一些view的行为,来反馈用户的使用操作,反馈的

       行为要合理性,就像真是的物理世界一样,不要太玄幻哦。

       可以将view的行为封装到interface中,然后去实现他。

    一:处理手势操作

        1.想其他UI框架一样,android也支持输入事件处理。用户的触发事件引发回调,通过实现回调方法,即可

         自定义对用户触发的相应。在andriod系统触发时间被定义为touch,回调的是onTouchEvent(android.view.MotionEvent)

            

        2.点击触发并不是很强大的相应模式,更好的相应模式应该是手势,比如:拉,推,轻拍,扔和缩放,为了

         实现这些手势android提供了 GestureDetector类,用于实现不同的手势。

         通过继承GestureDetector.OnGestureListener或是GestureDetector.SimpleOnGestureListener

         然后实现其中的onDown(MotionEvent)方法就可自定手势了。

            

        3.在使用手势的时候,无论你继承了监听手势的哪个类,重写的onDown的方法都必须返回true,除非不顾

         整个手势的完整性,如果返回了false,如果你想要使用手势的话,那么你可以在onTouchEvent()中接受到

         手势并处理:

            

         提示:当手势返回false的时候,传入的一个点击时间不认为了手势的一部分,但可以在自定义的手势中来处

            理想实现的事件。

            就是返回true了,那么点击这个动作就被接受的方法消费了,没有了就不会向下传递了,后续的方法

            就不会调用了,返回false则相反。

    二:创建一个满足物理运动的手势

        1.手势是一个强大的操作手机的方式,但是想要实现一个好的容易被人使用的手势很不容易,比如一个滚动条的手势

         用户通过手指在屏幕的控件上一滑动,控件就被滚动到其他地方了,投的过程中,开始比较快,之后就慢了些。

         这些强大手势需要满足数学公式和物理公式,是很复杂的,但是android为开发提供了几个工具类,用以实现

         不同的手势。如Scroller(滚动条)实现的滚动的手势,通过调用其中的fling(xx,xx,xx)方法来开始滚动的动作。

            

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
       mScroller.fling(currentX, currentY, velocityX / SCALE, velocityY / SCALE, minX, minY, maxX, maxY);
       postInvalidate();
    }

          提示:当使用GestureDetector计算的数度的时候,会发现数度太快了,所以很多开发者:

             It's common to divide the x and y velocity by a factor of 4 to 8.

        2.在使用fling()设置好物理手势之后,需要调用 Scroller.computeScrollOffset()定时的更新滚动的位置, computeScrollOffset()

         通过定时时间和物理公式来计算当前滚动到的位置。通过 getCurrX()getCurrY()来获取新的位置。

            

        3.虽然Scroller可以计算滚动的位置,但是并不会自动的将新的位置付给view,所以你需要自己去改变

         view的新位置,而且要显得自然平滑。这有两个建议:

            1.在调用了fling()后调用 postInvalidate()为了强制重新绘制view。这个技术要每次发生滚动

             的时候你在onDraw()方法中计算滚动的大小并且调用postInvalidate()

            2.在滚动的时候设置一个ValueAnimator对象,然后通过添加addUpdateListener()来控制动画。

             ValueAnimator是在API11中才有的,所以使用的时候注意。

              

    三:让UI的渐变表现的更平滑

        1.用户希望拥有一个表现的更现代的更时尚的界面,同时使用起来更舒服,所以android在3.0中提供了一个新的框架

         他是UI界面中的元素过度表现的更平滑,即: property animation framework

        2.当使用动画系统的时候,不要直接更改view动画的属性,而是使用 ValueAnimator去改变动画。

          

        3.如是你想将动画应用到基本的图形view上,那有个更简单的方法,就是使用view的 ViewPropertyAnimator

          

        

  • 相关阅读:
    Php compiler for .NET framework
    C++ Virtual Inheritance Memory Layout
    MIT公开课汉化
    OpenGL like Vulkan
    C++ Chrono Timer
    VisTools: C++模仿Java体系
    Lua IDE
    PHP调试
    Decoda
    JSRDB
  • 原文地址:https://www.cnblogs.com/qinghuaideren/p/3493875.html
Copyright © 2020-2023  润新知