上面是原图,下面是代码实现的高仿。

源码如下:

package com.lingyun.loaddemo;import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;/*** Created by dandy on 2016/6/14.*/
public class Cat extends View {private static final float SIZE = 60f;//默认大小private DisplayMetrics dm;private Paint paint,nosePaint,whiskerPaint;private  int exactlySize;private float size = SIZE;private RectF oval = new RectF();private Path mPath = new Path();private float center;private float noseSharp;//鼻尖宽度(就是那个小圆点)private float eyeRadius;private  float eyeDiameter;public Cat(Context context,AttributeSet attributeSet){super(context, attributeSet);setUpInit(attributeSet);}private void setUpInit(AttributeSet set){dm = Resources.getSystem().getDisplayMetrics();paint = new Paint();paint.setAntiAlias(true);paint.setStrokeCap(Paint.Cap.ROUND);nosePaint = new Paint();nosePaint.setColor(Color.RED);nosePaint.setAntiAlias(true);nosePaint.setStyle(Paint.Style.STROKE);nosePaint.setStrokeCap(Paint.Cap.ROUND);whiskerPaint = new Paint();whiskerPaint.setColor(Color.WHITE);whiskerPaint.setAntiAlias(true);whiskerPaint.setStyle(Paint.Style.STROKE);whiskerPaint.setStrokeCap(Paint.Cap.ROUND);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {/**计算宽**/final int widthMode = MeasureSpec.getMode(widthMeasureSpec);int width = MeasureSpec.getSize(widthMeasureSpec);if(widthMode == MeasureSpec.UNSPECIFIED || widthMode == MeasureSpec.AT_MOST){width = applyDimension(size);}/**计算高**/final int heightMode = MeasureSpec.getMode(heightMeasureSpec);int height = MeasureSpec.getSize(heightMeasureSpec);if (heightMode == MeasureSpec.UNSPECIFIED || heightMode == MeasureSpec.AT_MOST) {height = applyDimension(size);}/*** 取小的值作为控件的大小*/exactlySize = width >= height ? height:width;center = exactlySize / 2.0f;noseSharp = exactlySize / 16.0f;eyeRadius = center / 4.0f;eyeDiameter = eyeRadius * 2.0f;nosePaint.setStrokeWidth(applyDimension(1.5f)*exactlySize / applyDimension(size));whiskerPaint.setStrokeWidth(applyDimension(2.0f)*exactlySize / applyDimension(size));setMeasuredDimension(exactlySize, exactlySize);}@Overrideprotected void onDraw(Canvas canvas) {drawBackCicle(canvas);drawWhiskers(canvas);drawFace(canvas);drawEyes(canvas);drawNose(canvas);drawEars(canvas);super.onDraw(canvas);}private void drawBackCicle(Canvas canvas){canvas.save();canvas.translate(center, center);oval.set(-center, -center, center, center);paint.setColor(Color.RED);canvas.drawRoundRect(oval, center, center, paint);canvas.restore();}private void drawFace(Canvas canvas){canvas.save();canvas.translate(center,center);oval.set(-center * 0.7f, -center * 0.5f, center * 0.7f, center*0.7f);paint.setColor(Color.WHITE);canvas.drawOval(oval, paint);canvas.restore();}private void drawEyes(Canvas canvas){canvas.save();canvas.translate(center, center);final float eyeLineWidth = eyeRadius / 1.5f;paint.setColor(Color.RED);//left eyeoval.set(-(noseSharp / 2.0f + eyeDiameter), -eyeRadius / 2.0f, -noseSharp / 2.0f, eyeDiameter - eyeRadius / 2.0f);canvas.drawRoundRect(oval, eyeRadius, eyeRadius, paint);//right eyeoval.set(noseSharp / 2.0f, -eyeRadius / 2.0f, noseSharp / 2.0f+eyeDiameter, eyeDiameter- eyeRadius / 2.0f);canvas.drawRoundRect(oval, eyeRadius, eyeRadius, paint);paint.setColor(Color.WHITE);//left eyeLineoval.set(-(noseSharp / 2.0f + eyeRadius + eyeLineWidth / 6.0f), -eyeRadius / 2.0f + eyeLineWidth/1.5f,-(noseSharp / 2.0f + eyeRadius - eyeLineWidth / 6.0f), eyeDiameter - eyeRadius / 2.0f - eyeLineWidth/1.5f);canvas.drawRect(oval,paint);//right eyeLineoval.set((noseSharp / 2.0f + eyeRadius - eyeLineWidth / 6.0f), -eyeRadius / 2.0f + eyeLineWidth/1.5f,(noseSharp / 2.0f + eyeRadius + eyeLineWidth / 6.0f), eyeDiameter - eyeRadius / 2.0f - eyeLineWidth/1.5f);canvas.drawRect(oval,paint);canvas.restore();}private void drawNose(Canvas canvas){nosePaint.setColor(Color.RED);canvas.save();canvas.translate(center, center);//鼻尖底部比眼睛底部稍低一些final float noseBottom = 3.0f * center / 7.0f;oval.set(-noseSharp / 1.5f, noseBottom - noseSharp, noseSharp / 1.5f, noseBottom);paint.setColor(Color.RED);canvas.drawOval(oval, paint);//鼻孔final float diameter = center / 4.0f;oval.set(-diameter, noseBottom - noseSharp, 0, noseBottom - noseSharp + diameter/1.2f);canvas.drawArc(oval, -25, 240, false, nosePaint);oval.set(0, noseBottom - noseSharp, diameter, noseBottom - noseSharp + diameter/1.2f);canvas.drawArc(oval, -25, 240, false, nosePaint);canvas.restore();}private void drawEars(Canvas canvas){paint.setColor(Color.WHITE);canvas.save();canvas.translate(center, center);//先确定三个点的坐标//左下final float leftBottomX = -(noseSharp / 2.0f + eyeDiameter);final float leftBottomY = - eyeRadius / 2.0f;//左中final float leftCenterX = leftBottomX + center / 20.0f;final float leftCenterY = leftBottomY - center / 2.0f;//左上final float leftTopX = -(noseSharp / 2.0f + eyeRadius*0.6f);final float leftTopY = leftBottomY - center / 4.0f;mPath.reset();mPath.moveTo(leftBottomX, leftBottomY);mPath.quadTo(leftBottomX - center / 20.0f, leftBottomY - center / 4.0f, leftCenterX, leftCenterY);mPath.quadTo(-(noseSharp / 2.0f + eyeRadius*0.5f),leftBottomY - center / 2.5f,leftTopX,leftTopY);canvas.drawPath(mPath,paint);//右下final float rightBottomX = noseSharp / 2.0f + eyeDiameter;final float rightBottomY = - eyeRadius / 2.0f;//右中final float rightCenterX = rightBottomX - center / 20.0f;final float rightCenterY = rightBottomY - center / 2.0f;//右上final float rightTopX = noseSharp / 2.0f + eyeRadius*0.6f;final float rightTopY = rightBottomY - center / 4.0f;mPath.reset();mPath.moveTo(rightBottomX, rightBottomY);mPath.quadTo(rightBottomX + center / 20.0f, rightBottomY - center / 4.0f, rightCenterX, rightCenterY);mPath.quadTo(noseSharp / 2.0f + eyeRadius*0.5f,leftBottomY - center / 2.5f,rightTopX,rightTopY);canvas.drawPath(mPath,paint);canvas.restore();}private void drawWhiskers(Canvas canvas){canvas.save();canvas.translate(center, center);oval.set(-center, 0.3f * center, center, 0.4f * center);canvas.drawArc(oval, 202, 135, false, whiskerPaint);oval.set(-center, 0.36f * center, center, 0.7f * center);canvas.drawArc(oval, 208, 125, false, whiskerPaint);oval.set(-center, 0.43f * center, center,center);canvas.drawArc(oval, 215, 110, false, whiskerPaint);canvas.restore();}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);}/*** px2dp* @param value*/private int applyDimension(float value){return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, dm);}}

高仿猫眼电影Logo图标相关推荐

  1. php实现猫眼电影院选座思路,高仿猫眼电影选座(选票)模块

    前言: 高仿猫眼选票模块,看着猫眼app选票模块做的如此之帅,网上又没比较好的库,自己手痒痒了就开始模仿起来了,最终用了几天时间实现了,也封装好了一套选座模块. 上图看效果先: 1)画座位图其实不是很 ...

  2. java演出厅选票_高仿猫眼电影选座(选票)模块-b

    上图看效果先: 1)画座位图其实不是很难一般数据都会给坐标,将坐标对应座位画出来就可以了,主要是开场动画要设置默认大小,还有座位图的数量也不是固定的,所以在初始化座位图的时侯就默认算出了整个座位图的大 ...

  3. 高仿猫眼电影选座(选票)模块-b

    上图看效果先: 1)画座位图其实不是很难一般数据都会给坐标,将坐标对应座位画出来就可以了,主要是开场动画要设置默认大小,还有座位图的数量也不是固定的,所以在初始化座位图的时侯就默认算出了整个座位图的大 ...

  4. TTMS(仿猫眼电影)iOS版项目报告

    文章目录 前言 GitHub 所有使用到的第三方库 项目详细说明 登陆注册 登陆 预览 文件名 注册 预览 文件名 总结 城市定位 预览 文件名 总结 选择电影 预览 文件名 总结 选择影院 预览 文 ...

  5. HTML期末学生作业 HTML+CSS+JavaScript仿猫眼电影在线网站 Hbuilder网页制作

    ❤ HTML期末学生作业~html+css+javascript仿猫眼电影在线网站(功能齐全) web期末结课大作业 html+css+javascript网页.电影.仿京东.天猫.服装. 企业网站制 ...

  6. 视频教程-影院在线售票云平台(仿猫眼电影,附SpringBoot项目源码)-Java

    影院在线售票云平台(仿猫眼电影,附SpringBoot项目源码) 19年软件开发经验,设计开发40多个大型软件,10年从事高等教育,主要为java系列课程,带你轻松进入java生涯. 赖国荣 ¥299 ...

  7. 苹果cmsV10高仿草民电影网在线影视网站模板 带手机版

    介绍: 苹果cmsV10高仿草民电影网在线网站模板 带手机版 网盘下载地址: http://kekewl.cc/8obtG6AzODd0 图片:

  8. 苹果cmsv10自适应seo高仿草民电影网模板

    简介: 自适应seo高仿草民电影网源码 苹果cmsv10模板,苹果cmsv10高仿草民电影网自适应seo好收录的模板 网盘下载地址: http://kekewl.org/t0XGqOMXCim0 图片 ...

  9. HTML+CSS+JavaScript实现仿猫眼电影购票选座

    一.功能实现 (1)在页面左侧区域,单击"可选座位",将座位设置为"已选座位",一次最多选5 个座位.右侧座位号汇总区域显示已选中的座位号,并显示电影票总价. ...

最新文章

  1. 微信拦截网站怎么办 微信屏蔽网址如何正常打开
  2. 001_Layout布局
  3. 数据中心2022:绿色的下一步是智能化
  4. 【整理】各种语言的API文档
  5. JZOJ 5926. 【NOIP2018模拟10.25】naive 的图
  6. jquery获取html文件大小,jQuery获取file表单选择文件的路径、名字、大小、类型_忘却_前端开发者...
  7. ❤️❤️❤️【资料免费领取】简历模板、职场PPT模板、硬核学习资料+PDF资料(Java、Python、大数据、机器学习)❤️❤️❤️
  8. html5在线api,HTML5+ API Reference
  9. 搭建空的maven多模块项目架构并且上传到远程git仓库(超详细 cmd命令版本)
  10. 安装apache 后,找不到服务,解决办法
  11. 自定义UITableViewCell
  12. QT--学习疑惑探索
  13. Word:不显示图片 + 清空“最近使用的文档”列表
  14. Sync Framework 词汇表
  15. matlab时域数据转频域,怎么使用IFFT(matlab)将频域转换为时域
  16. Java实现PDF转换成图片
  17. 各大型网站反爬虫策略
  18. 赠书:支付平台架构业务、规划、设计与实现
  19. 0514课堂笔记--抽象类-接口
  20. 音准听力测试软件app,听音练耳app神器考试用

热门文章

  1. dmp数据覆盖恢复(自用 记录)
  2. 数据库外键:一对多/多对多关系
  3. 心田花开:想要提高学习成绩?你找对方法了吗?
  4. openCV 隔帧读取视频帧的方式
  5. 中小学计算机能力者提升培训合格,关于参加全省中小学教师信息技术应用能力提升工程2.0培训管理者高级研修班的通知...
  6. 基于51单片机的温度控制proteus仿真原理图PCB
  7. python 读取excel 插入mysql
  8. 高精度倾角传感器的应用
  9. 真机telnet登录eNSP防火墙usg5500
  10. C++ 求Fibonacci(斐波那契数列)前n项的和