zoukankan      html  css  js  c++  java
  • 自定义控件之圆形的image

    需要添加点击事件的的时候在自定义的控件中覆写OnTouchEvent();方法进行点击事件的分发

     1 package com.example.administrator.mvp.ui.widget;
     2 import android.content.Context;
     3 import android.graphics.Bitmap;
     4 import android.graphics.BitmapFactory;
     5 import android.graphics.Canvas;
     6 import android.graphics.Color;
     7 import android.graphics.Paint;
     8 import android.graphics.Path;
     9 import android.graphics.PixelFormat;
    10 import android.graphics.Rect;
    11 import android.graphics.Region;
    12 import android.graphics.drawable.BitmapDrawable;
    13 import android.graphics.drawable.Drawable;
    14 import android.util.AttributeSet;
    15 import android.view.View;
    16 import android.widget.ImageView;
    17 
    18 import com.example.administrator.mvp.R;
    19 
    20 
    21 /**
    22  * 这里我们继承ImageView
    23  * Created by Zyh on 2016/11/27.
    24  */
    25 public class MyCycleImageView extends View {
    26     /**
    27      *方法的作用:
    28      * 构造方法--主要进行变量的初始化
    29      * onMeasure---主要对该控件的宽高进行重置
    30      * onDraw---对需要显示的信息进行重绘
    31      * 我们需要用到的工具:
    32      * 1.画笔
    33      * 2.位图
    34      * 3.绘制的path路线
    35      * 4.画布,这个有系统提供
    36      * 
    37      */
    38     private Bitmap mBitmap;
    39     private Paint mPaint;
    40     private Path mPath;
    41     private int dia;//显示的直径
    42     public MyCycleImageView(Context context, AttributeSet attrs) {
    43         //这个方法是系统默认要执行的方法
    44         super(context, attrs);
    45         mPaint=new Paint();
    46         //设置抗锯齿
    47         mPaint.setAntiAlias(true);
    48         mPaint.setStyle(Paint.Style.STROKE);
    49         //设置画笔透明
    50         mPaint.setAlpha(0);
    51         mPath=new Path();
    52     }
    53     @Override
    54     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    55         //重新规定布局的宽和高
    56         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    57         //图片的直径我们规定为宽高中最小的那个尺寸
    58         dia=Math.min(MeasureSpec.getSize(widthMeasureSpec),MeasureSpec.getSize(heightMeasureSpec));
    59         //按比例创建位图
    60         mBitmap=Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.chazhuo),dia,dia,false);
    61         //设置路径为直径是dia的圆
    62         mPath.addCircle(dia/2,dia/2,dia/2, Path.Direction.CW);
    63         //这个方法是重新定义宽高的时候必须要执行的方法,否则会有异常
    64         setMeasuredDimension(dia,dia);
    65     }
    66 
    67     @Override
    68     protected void onDraw(Canvas canvas) {
    69          //重新绘制控件
    70          super.onDraw(canvas);
    71          //绘制圆形的区域--可以为我们位图描边
    72          canvas.drawPath(mPath,mPaint);
    73          //按照路径裁剪画布,裁剪剩下的区域我们设置为交集
    74          canvas.clipPath(mPath, Region.Op.INTERSECT);
    75          canvas.drawBitmap(mBitmap,0,0,null);
    76     }
    77 }

     

      效果如上图

  • 相关阅读:
    ios -- 教你如何轻松学习Swift语法(一)
    collectionView,tableView的细节处理
    主流界面搭建原理(类似百思不得姐主界面)
    ios--时间格式化(cell业务逻辑处理)
    test
    Mac下安装Matlab R2015b
    最大奇约数
    编码问题
    最优二叉查找树
    二维数组和二级指针
  • 原文地址:https://www.cnblogs.com/zhaiyaohua/p/6111576.html
Copyright © 2011-2022 走看看