V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lixyz
V2EX  ›  问与答

Android, SurfaceView 中绘制内容,因为加了 canvas.clipPath 导致之后的绘制内容不显示,有没有人遇到过啊

  •  
  •   lixyz · 2017-12-11 14:59:41 +08:00 · 2235 次点击
    这是一个创建于 2539 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自定义控件,一个圆形的进度条,圆形内使用两个波浪来显示进度,圆形中央用文字显示。

    因为波浪需要一直刷新,所以想着用 SurfaceView 来绘制,绘制线程大致步骤如下:

    1. 绘制背景色
    2. 绘制深色波浪
    3. 绘制浅色波浪
    4. 绘制文字

    因为是圆形的,所以需要在绘制波浪前将 Canvas 切割为圆形在绘制,所以出现了以下问题

    1. 该控件在 ViewPager 第二页显示正常
    2. 该控件在一个单独的页面中,显示不正常,表现如下:

    2.1 在绘制波浪前,使用 canvas.clipPath 方法切割,那么切割代码之后的内容均不显示(波浪、文字)

    2.2 绘制波浪时,使用 path.op 来切割,那么 op 过的路径不显示

    2.3 不切割,正常显示

    有没有人遇到过这种情况啊,另外 V2EX 好像没办法贴图和贴代码?把代码或者图片贴出来,我想会比我的文字描述正直观一些

    第 1 条附言  ·  2017-12-11 18:01:45 +08:00

    SurfaceView 的代码可以看这里,初学者,写的很烂,大神轻拍

    https://gist.github.com/liguobing/73199ea93fe04937b19447578056c6c9

    绘制线程从第290行开始。

    有关“切割”的代码分别在 311(使用canvas.clipPath方法切割)、323、335(使用path.op方法切割)

    问题在于,这个View如果放在ViewPager的第二页,正常显示

    如果放在一个单独的页面当中,就会出问题

    • 如果使用canvas.clipPath方法切割,那么从311行代码之后的绘制内容都不显示

    • 如果使用path.op切割,那么“深色波浪”和“浅色波浪”(代码中有注释)部分不显示

    • 如果不切割,则正常显示(只不过不是圆形的)

    第 2 条附言  ·  2017-12-11 18:05:17 +08:00

    对了,测试环境:

    手机:Nexus5,Android 6.0.1 开发环境:AndroidStudio 3.0 build.gradle:

    android {
        compileSdkVersion 25
        buildToolsVersion '26.0.2'
        defaultConfig {
            applicationId "com.li_xyz.lifekeeper"
            minSdkVersion 23
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
    
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    2 条回复    2017-12-11 18:05:33 +08:00
    yuriko
        1
    yuriko  
       2017-12-11 17:36:56 +08:00
    贴代码可以用 Gist

    问题是没看明白,姑且提一下我前两天踩了一个 clipPath 低版本不支持的坑(有 API 没实现)。
    lixyz
        2
    lixyz  
    OP
       2017-12-11 18:05:33 +08:00
    @yuriko 代码已添加,麻烦您帮忙看一下,看看能不能找到问题所在。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2852 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:51 · PVG 21:51 · LAX 05:51 · JFK 08:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.