码迷,mamicode.com
首页 > 移动开发 > 详细

Android Scroll详解

时间:2016-09-17 09:30:43      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

在前边的文章中,我们已经对Android触摸事件处理有了大致的了解,并且详细探讨了MotionEvent的相关用法。对之前文章中的知识还不是很了解的同学,请阅读《Android MotionEvent详解》

 

今天,我们就来探讨一下Android中界面滚动效果的相关机制,本篇文章主要讲解一下滚动相关的知识点,之后的文章会涉及实际的代码和原理。希望大家阅读完这篇文章之后,能够了解或者掌握一下知识:

 

  • Android 视图的组成部分

  • mScrollX和mScrollY对视图显示的影响

  • scrollTo和scrollBy的使用

  • invalidate和postInvalidate的区别

 

View的mScrollX和mScrollY

 

我们都知道,View中有两个重要的成员变量,mScrollX,mScrollY.它们分别代表视图内容(view content)水平方向和竖直方向的滚动距离(app开发ty300.com)。我们可以通过setScrollX和setScrollY来个函数来改变它们的值,从而来滚动视图的内容。

 

在这里需要强调的是,mScrollX和mScrollY会导致视图内容(view content)变化,但是不会影响视图背景(background)。

 

看到这里同学们或许会有写疑问,视图的内容和背景有什么区别呢?视图还有哪些组成部分呢?

 

我们可以从View的draw方法中得知View的组成部分。

 

// http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/View.java#View

public void draw(Canvas canvas) {

         ........

        /*

         * Draw traversal performs several drawing steps which must be executed

         * in the appropriate order:

         *

         *      1. Draw the background

         *      2. If necessary, save the canvas‘ layers to prepare for fading

         *      3. Draw view‘s content

         *      4. Draw children

         *      5. If necessary, draw the fading edges and restore layers

         *      6. Draw decorations (scrollbars for instance)

         */

 

        // Step 1, draw the background, if needed

        if (!dirtyOpaque) {

            drawBackground(canvas);

        }

        .......

 

        // Step 2, save the canvas‘ layers

        .......

        // Step 3, draw the content

        if (!dirtyOpaque) onDraw(canvas);

 

        // Step 4, draw the children

        dispatchDraw(canvas);

 

        // Step 5, draw the fade effect and restore layers

        .......

        if (drawTop) {

            matrix.setScale(1, fadeHeight * topFadeStrength);

            matrix.postTranslate(left, top);

            fade.setLocalMatrix(matrix);

            p.setShader(fade);

            canvas.drawRect(left, top, right, top + length, p);

        }

        .....

        // Step 6, draw decorations (scrollbars)

        onDrawScrollBars(canvas);

        ......

    }

 

View显示内容由一下几个部分组成:

 

  • 背景(background)

  • 本身的内容(content)

  • 子视图

  • 边界渐变效果(fade effect),上下左右四个边界都可能会有渐变效果,代码中只显示了上边界的渐变效果绘制。

  • 边框或者装饰效果(decorations),比如滚动条

 

举个例子吧,我们都知道在布局文件中,TextView有两个比较重要的属性:background,text。background可以设置TextView的背景,而text则是设置要绘制字体内容。

稿源:勤快学QKXue.NET

阅读完整Android Scroll详解

Android Scroll详解

标签:

原文地址:http://www.cnblogs.com/qkxue/p/5877939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!