Android 绘制波浪线(使用 bitmap )

概述

Android 中绘制波浪线大致有三个方案:

  1. 直接使用一个完整的波浪线切图

  2. 自定义控件来绘制

  3. 用xml的bitmap标签实现波浪线效果

第一种方法实现的波浪线实现起来十分简单,但劣势也很明显,波浪线会随着View的长宽进行拉伸变形,若项目中只需使用到固定宽高的波浪线,使用该方法也可。

自定义控件可以达到比较好的效果,但是实现起来比较繁琐。

用xml的bitmap标签实现波浪线,效果良好,而且实现起来较为简单。

用xml的bitmap标签来实现

XML Bitmap

官方api(需翻墙)

XML Bitmap 是一个用XML定义的文件放在资源目录,定义的对象是图片,为bitmap定义别名,这个文件可以给bitmap定义一些额外的属性。例如:抖动、平铺。

1、文件存放位置

res/drawable/filename.xml

filename用作资源ID.

2、编译的资源数据类型

BitmapDrawable

3、资源引用

In Java: R.drawable.filename
In XML : @[package:]drawable/filename

4、语法

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

5、元素组成

元素类型含义
srcintDrawable资源
antialiasboolean启用或禁用抗锯齿
ditherboolean启用或禁用抖动位图
filterboolean启用或禁用位图过滤器
gravityKeyword定义该位图的位置
mipMapboolean启用或禁用的mipmap提示
tileModeKeyword定义平铺模式

制作波浪线主要用到了 bitmap 中的 src、antialias、tileMode这三个元素。

6、tileMode

含义
disabled不平铺 bitmap ,tileMode的默认值
clamp复制边缘色彩
repeatX、Y 轴进行重复图片显示,也就是普通的平铺效果
mirror在水平和垂直方向上使用交替镜像的方式重复图片的绘制

绘制波浪线

1、首先准备一张一个周期的波浪线,如下图所示:

item_wave.png:

一个周期的波浪线

2、新建wave.xml文件,使用bitmap绘制波浪线:

wave.xml

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
  android:antialias="true" 
  android:src="@drawable/item_wave" 
  android:tileMode="repeat" /> 
代码含义
android:antialias=”true”抗锯齿
android:src=”@drawable/item_wave”设置资源引用
android:tileMode=”repeat”设置平铺模式

3、在布局文件中使用

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:orientation="vertical" 
  android:paddingBottom="@dimen/activity_vertical_margin" 
  android:paddingTop="@dimen/activity_vertical_margin" > 

  <ImageView 
    android:layout_marginTop="50dp"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/wave" /> 

</LinearLayout>

注意:这个ImageView通过background显示图片,src是显示不了这样的效果的。

完整效果图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值