• Stars
    star
    575
  • Rank 77,622 (Top 2 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created about 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🦄 利用本库绘制出贝塞尔曲线魔炫背景。Customize view:Draw the magic dazzle background with Bézier.

ContourView 轮廓背景控件

Version Code

新控件发布,欢迎大家 Star

GitHub issues  GitHub forks  GitHub stars

ContourView

在闲逛一个图片社区时看到这张图片,个人对炫酷的东西比较敏感(视觉肤浅),本来想下载一下这个 App 看一下实际效果,可是没找到。心有不甘,于是分析了一下,感觉实现起来不会太难,自己也花点时间实现了效果,发布了一个库。

你在这里能够知道的:

具体相关

效果图

轮廓样式(contour_style) 效果(这里只是轮廓的样式,默认效果都是白色,这里显示的颜色是自己设置的)
Sand(默认) sand
Clouds clouds
Beach beach
Ripples ripples
Shell shell
自定义(根据自己需要设置轮廓坐标) 自定义

属性设置

(xml)属性名称 说明 值类型
contour_style 内置轮廓样式 Beach,Ripples,Clouds,Sand,Shell
smoothness 轮廓弯曲系数(没有必要的情况下,不建议设置) Float类型 范围:0--1,建议范围:0.15--0.3,默认:0.25
shader_mode 轮廓内颜色的填充方式 RadialGradient,SweepGradient,LinearGradient,不设置默认纯色填充
shader_startcolor 填充起始颜色 color类型,半透明效果,设置类似#90FF0000的值(默认白色,需设置shader_mode 才有效果)
shader_endcolor 填充结束颜色 同上
shader_style 填充起始点及方向的控制 LeftToBottom(左上角到右下角),RightToBottom(右上角到左下角),TopToBottom(上中点到下中点),Center(中点到右下角)
shader_color 填充纯色颜色 color类型,默认白色,不设置shader_mode时,可以通过此属性设置纯色填充颜色

动态属性

以上的(xml)属性都有对应的设置方法。 此外,还有一些可以动态设置的属性。

轮廓锚点坐标集

public void setPoints(List<Point[]> pointsList)
//List<> 表示轮廓的个数,Point[] 表示具体某个轮廓的坐标集,每个轮廓至少4个锚点。
方法参数 说明
setPoints(int... pts) 单个轮廓,int[]{锚点1.x,锚点1.y,锚点2.x,锚点2.y......锚点n.x,锚点y}
setPoints(Point[]... pointsArr) 单个轮廓 android.graphics.Point
setPoints(Point... points) 多个轮廓
setPoints(int[]... ptsArr) 多个轮廓

Shader 自定义轮廓绘制方式

public void setShader(Shader... shader)
//Shader:传入自己自定义RadialGradient,SweepGradient,LinearGradient。
//当传入多个Shader时,给多个轮廓设置不同的绘制方式,Shader[0]填充轮廓1,Shader[1]填充轮廓2...

使用步骤

Step1. 添加依赖

Gradle

dependencies{
    compile 'com.ocnyang:contourview:1.0.1'
}

Maven

<dependency>
  <groupId>com.ocnyang</groupId>
  <artifactId>contourview</artifactId>
  <version>1.0.1</version>
  <type>pom</type>
</dependency>

或者引用本地 lib

implementation project(':contourview')
//或者下面方式
//compile project(':contourview')

Step2. 在布局文件中使用,也可以设置相应的自定义属性

<com.ocnyang.contourview.ContourView
    android:layout_width="match_parent"
    android:layout_height="400dp"
    app:contour_style="Ripples"
    app:shader_endcolor="@color/endcolor"
    app:shader_mode="RadialGradient"
    app:shader_startcolor="@color/startcolor"
    app:shader_style="Center"
    app:smoothness="0.2"/>

根据自己的需要来设置属性。

Step3. 如果需要自定义自己独特的轮廓,可以在代码中动态设置以下内容

/**
 * Customize the coordinates of the anchor to control the area to be drawn。
 */
private void initCustomContourView() {
    ContourView contourViewCustom = (ContourView) findViewById(R.id.contourview_custom);
    int width = getWidth();//获取屏幕的宽度
    int hight = 400;
    int[] ints = {width / 2, 0, width, hight / 2, width / 2, hight, 0, hight / 2};
    int[] intArr = new int[]{width / 2, hight / 4, width / 4 * 3, hight / 2, width / 2, hight / 4 * 3, width / 4, hight / 2};
    contourViewCustom.setPoints(ints, intArr);
    contourViewCustom.setShaderStartColor(getResources().getColor(R.color.startcolor));
    contourViewCustom.setShaderEndColor(getResources().getColor(R.color.endcolor));
    contourViewCustom.setShaderMode(ContourView.SHADER_MODE_RADIAL);
}

/**
 * Controls the color of the drawing.
 */
private void initBeachContourView() {
    ContourView contourViewBeach = ((ContourView) findViewById(R.id.contourview_beach));

    RadialGradient radialGradient = new RadialGradient(0, 0,4000,
            getResources().getColor(R.color.startcolor),
            getResources().getColor(R.color.endcolor),
            Shader.TileMode.CLAMP);
    LinearGradient linearGradient = new LinearGradient(0, 0, getWidth(), 400,
            Color.argb(30, 255, 255, 255), Color.argb(90, 255, 255, 255),
            Shader.TileMode.REPEAT);
    contourViewBeach.setShader(radialGradient, linearGradient);
}

版本历史

  • v1.0.1 新增支持 3 个锚点坐标绘制轮廓;

More Repositories

1

Android-Animation-Set

📚 Android 所有动画系列详尽教程。 Explain all animations in Android.
Java
2,804
star
2

QBox

🐈 RxJava+Retrofit+Okhttp+Glide + A life tool App, contains modules: news; jokes; constellation fortune; LED; weather; calendar; two-dimensional code, and more ... 小秋魔盒是一个生活工具 App,主要功能有:新闻资讯;微信精选美文;笑话趣图;星座运势;LED字幕;天气;日历;二维码;手电筒;老黄历。在开发中尽可能多的用了目前比较流行的框架和库。
Java
1,380
star
3

PageTransformerHelp

👍 A PageTransformer library for Android ViewPager,have some Banner styles. ViewPager 实现轮播图、实现卡片切换。
Java
599
star
4

RecyclerViewEvent

RecyclerView onItemClick、onItemLongClick、drag、swipe、divider、reuse disorder RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除、优雅解决 EditText 和 CheckBox 复用错乱问题、定向刷新、DiffUtil、局部刷新
Kotlin
299
star
5

CartLayout

🦄 使用 RecyclerView 实现店铺分组购物车。 高仿京东购物车、高仿淘宝购物车、高仿天猫购物车
Java
130
star
6

AndroidBang

《Android 江湖花名册》
114
star
7

flutter_ui_kit

UI Kit of CookMe by Flutter;
Dart
45
star
8

FontTest

屏幕适配的顶级淫技:使用 TextView 来显示图片
Java
27
star
9

AnchorImageViewDemo

图片锚点定位;【图片画圈定位 请移步 👉https://github.com/OCNYang/DrawPartViewDemo】
Java
15
star
10

ConstraintLayout_Guide

全面讲解 ConstraintLayout 相关知识,目前最强大的布局控件,没有之一,不接受反驳。
Kotlin
8
star
11

DrawPartViewDemo

🎯 图片画圈定位;【图片锚点定位 请移步 👉https://github.com/OCNYang/AnchorImageViewDemo】
Java
6
star
12

Flutter-Notes

收集学习 Flutter 不错的教程。
5
star
13

Linux

开启 Linux 之行
5
star
14

Support

索拉卡-通用库
Java
2
star
15

GSYVideoPlayer-master

Java
1
star
16

OCNYang

GitHub 首页 简介
1
star
17

iconfont2strings

批量将 iconfont 中的字符转换成 Android 中的字符串资源 strings.xml
Java
1
star
18

EFall

💌 筑一座柔城,愿每一次心的疲惫,都能在这得到安慰......
1
star