热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android编程绘制圆形图片的方法

这篇文章主要介绍了Android编程绘制圆形图片的方法,结合实例形式较为详细的分析了Android通过自定义控件实现图形绘制的相关技巧,需要的朋友可以参考下

本文实例讲述了Android编程绘制圆形图片的方法。分享给大家供大家参考,具体如下:

效果图如下:

第一步:新建RoundView自定义控件继承View

package com.rong.activity;
import com.rong.test.R;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
 * 利用Xfermode制作一个圆形图片
 * 
 * @author 徐荣
 *
 */
public class RoundView extends ImageView {
  /**
   * 画笔
   */
  private Paint mPaint;
  /**
   * 原型图
   */
  private Bitmap src;
  /**
   * 遮罩层
   */
  private Bitmap mask;
  public RoundView(Context context, AttributeSet attrs) {
    super(context, attrs);
    // 初始化画笔
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    // 拿到原型图
    src = BitmapFactory.decodeResource(getResources(), R.drawable.ml);
  }
  @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    // 图片的遮罩,为什么要在这里面初始化遮罩层呢?因为在这个方法里Width()和Height()才被初始化了
    mask = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Config.ARGB_4444);
  }
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    // 设置画布的颜色为透明
    canvas.drawColor(Color.TRANSPARENT);
    // 划出你要显示的圆
    Canvas cc = new Canvas(mask);
    cc.drawCircle(getMeasuredWidth() / 2, getMeasuredHeight() / 2, getMeasuredHeight() / 2, mPaint);
    // 这个方法相当于PS新建图层,下面你要做的事就在这个图层上操作
    canvas.saveLayer(0, 0, getMeasuredWidth(), getMeasuredHeight(), null, Canvas.ALL_SAVE_FLAG);
    // 先绘制遮罩层
    canvas.drawBitmap(mask, 0, 0, mPaint);
    // 设置混合模式
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    // 再绘制src源图
    canvas.drawBitmap(src, 0, 0, mPaint);
    // 还原混合模式
    mPaint.setXfermode(null);
    // 还原画布,相当于Ps的合并图层
    canvas.restore();
  }
}

第二步 新建布局文件Activity_main.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  


运行!

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。


推荐阅读
  • 前期部署1.JDK安装,配置PATH2.下载spark-1.6.1-bin-hadoop2.6.tgz,并上传到服务器解压3.在 usr 下创建软链接到目标文件夹4.修改配置文件, ... [详细]
  • @JsonField和@JsonProperty的使用和区别
    @JsonFieldJsonField是位于fastjson包下的,实体类序列化为json字符串的时候,此类的原字段,序列化为json中的规定的字段配合JSON.toJSONStr ... [详细]
  • [191]python3.6下scrapy框架的安装
    首先考虑使用最简单的方法安装pipinstallscrapy命令安装,提示FailedbuildingwheelforTwistedMicrosoftVisual ... [详细]
  • 1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。2、wa ... [详细]
  • DimmyCompasnewMySTAComponent()PublicSubPage_Load()myComp.Name=BobEndSub  首选机 ... [详细]
  • 今天用css做了一个QQ登录页面
    今天写一些简单的页面 ... [详细]
  • spring data jpa介绍以及基础示例
    JPA介绍JPA的全称是JavaPersistenceAPI,提供了一个规范,用于将数据通过Java对象持久化、读取和管理数据库中的关系表。所以JPA本质上就是一种ORM规 ... [详细]
  • 我有一个用C#编写的服务器,需要从Java1.6与之对话.我需要连接到服务器,保持连接,并双向发送消息.消息是一个int(消息的长度),然后是一个XML文件.做这个的最好方式是什么 ... [详细]
  • MyBatis笔记04分页查询、resultMap的简单使用
    MyBatis笔记04-----分页查询、resultMap的简单使用-分页查询1、分页查询的好处MyBatis作为持久层框架,主要任务就是操作数据库,即是对数据的增、删、查 ... [详细]
  • 小编典典UCanAccess是一个纯JavaJDBC驱动程序,它使我们无需使用ODBC即可读写Access数据库。它使用其他两个软件包Jackcess和HSQLDB来 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了WPF动态添加带有detals的ListViewItem相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 开始仔细学习WPF了说是动画不流畅,可以通过设置帧率解决,查了很多,都说设置Timeline.DesiredFrameRateProperty,但都没说加到哪里,在代码很多地方加上 ... [详细]
  • ros:cartographer(二)整体介绍
    cartographer的doc中给出了这个图。现在我还没看过源码,所以只能猜测一些内容。待看完源码后,再详细介绍这个图。直观地说,左侧 ... [详细]
  • 系统被描述为不依赖于底层技术的服务服务通过消息实现1SOA涉及到服务的提供者和消费者参与SOA的系统是服务提供者,还是服务的消费者,要视工作流而定服务和消息是无状态的2服务和消费者 ... [详细]
  • 本文目录一览:1、哪有免费的JAVA教程?2、 ... [详细]
author-avatar
虚实人生轶事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有