自定义控件,一个圆形的进度条,圆形内使用两个波浪来显示进度,圆形中央用文字显示。
因为波浪需要一直刷新,所以想着用 SurfaceView 来绘制,绘制线程大致步骤如下:
因为是圆形的,所以需要在绘制波浪前将 Canvas 切割为圆形在绘制,所以出现了以下问题
2.1 在绘制波浪前,使用 canvas.clipPath 方法切割,那么切割代码之后的内容均不显示(波浪、文字)
2.2 绘制波浪时,使用 path.op 来切割,那么 op 过的路径不显示
2.3 不切割,正常显示
有没有人遇到过这种情况啊,另外 V2EX 好像没办法贴图和贴代码?把代码或者图片贴出来,我想会比我的文字描述正直观一些
SurfaceView 的代码可以看这里,初学者,写的很烂,大神轻拍
https://gist.github.com/liguobing/73199ea93fe04937b19447578056c6c9
绘制线程从第290行开始。
有关“切割”的代码分别在 311(使用canvas.clipPath方法切割)、323、335(使用path.op方法切割)
问题在于,这个View如果放在ViewPager的第二页,正常显示。
如果放在一个单独的页面当中,就会出问题
如果使用canvas.clipPath方法切割,那么从311行代码之后的绘制内容都不显示
如果使用path.op切割,那么“深色波浪”和“浅色波浪”(代码中有注释)部分不显示
如果不切割,则正常显示(只不过不是圆形的)
对了,测试环境:
手机: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'
}
}
}
1
yuriko 2017-12-11 17:36:56 +08:00
贴代码可以用 Gist
问题是没看明白,姑且提一下我前两天踩了一个 clipPath 低版本不支持的坑(有 API 没实现)。 |