安卓自定义控件卡券CouponView
来源:互联网 发布:成都软件测试工资 编辑:程序博客网 时间:2024/05/19 04:05
package com.example.couponview;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.RelativeLayout;/** * 卡券控件 * @author wbl * */public class CouponView extends RelativeLayout{private Paint mPaint;//边缘小半圆的半径private float radius = 20;//小半圆之间的间距private float spacing = 20;//左右边距private float paddingLeft;private float paddingRight;//半圆的个数private int numCircle;//控件的高宽度private int height;private int width;private float remain;public CouponView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);//initView(context);}public CouponView(Context context, AttributeSet attrs) {super(context, attrs);initView(context,attrs);}public CouponView(Context context) {super(context);//initView(context);}private void initView(Context context,AttributeSet attrs) {mPaint = new Paint();mPaint.setAntiAlias(true);mPaint.setColor(Color.WHITE);TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.CouponView);float radius = ta.getDimension(R.styleable.CouponView_radius,20);float spacing = ta.getDimension(R.styleable.CouponView_spacing, 20);setRadius(radius);setSpacing(spacing);ta.recycle();paddingLeft = paddingRight = spacing;}private void setSpacing(float spacing) {this.spacing = spacing;}private void setRadius(float radius) {this.radius = radius;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);System.out.println("这里");// getWidth在OnCreat的时候得到的是0. 当一个view对象创建时,android并不知道其大小,所以getWidth()和 getHeight()返回的结果是0,真正大小是在计算布局时才会计算.width = this.getWidth();height = this.getHeight();//圆的数量始终比边距数量少一个,所以总长度减去左边距除以2*radius+spacing的值就是圆的数量numCircle = (int) ((width-paddingLeft)/(2*radius+spacing));//除以所有圆和边距的所余下的长度remain = ((width-paddingLeft)%(2*radius+spacing));System.out.println("圆的个数=="+numCircle);System.out.println("remain=="+remain);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas); //remain/2保证左右两边边距一样float cx = (paddingLeft+radius+remain/2);for(int i=0;i<numCircle;i++){canvas.drawCircle(cx, 0, radius, mPaint);canvas.drawCircle(cx, height, radius, mPaint);cx = (int) (cx+(2*radius+spacing));}}}
在values目录下创建attrs.xml文件
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="CouponView"> <attr name="radius" format="dimension"/> <attr name="spacing" format="dimension"/> </declare-styleable></resources>
下面是布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:wbl="http://schemas.android.com/apk/res/com.example.couponview" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:background="@color/white" android:paddingTop="20dp" > <com.example.couponview.CouponView android:layout_width="280dp" android:layout_height="100dp" android:background="@color/blue" wbl:radius="10dp" wbl:spacing="10dp" android:gravity="center" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="卡劵" android:textColor="@color/white" android:textSize="30dp" /> </com.example.couponview.CouponView></RelativeLayout>
以下是运行结果
0 0
- 安卓自定义控件卡券CouponView
- CouponView自定义优惠卷布局
- 自定义安卓控件
- 安卓----自定义控件
- 安卓自定义控件
- 安卓自定义控件
- 安卓自定义控件
- 安卓自定义控件
- 安卓自定义控件
- 安卓自定义控件
- 安卓自定义控件
- 安卓自定义控件,自定义控件属性
- 安卓自定义日历控件
- 安卓自定义日历控件
- 安卓自定义控件 - 进度条
- 安卓时间控件自定义
- 安卓入门---自定义控件
- 安卓自定义组合控件
- 操作系统---进程/线程 间通信
- android中的AIDL进程间通信
- python的异步IO模块asyncio学习
- 操作系统---进程/线程 间通信
- C与C++ 混合编译
- 安卓自定义控件卡券CouponView
- 认识繁体字
- c++ opencv读取图片像素值并进行加密
- Java中 intValue,parseInt,Valueof 这三个关键字的区别
- CentOS7搭建SVN服务器
- Android网络之HttpUrlConnection和Socket关系解析
- c++开坑
- 371. Sum of Two Integers
- 查找链表倒数的节点