zoukankan      html  css  js  c++  java
  • 17 自定义属性及圆角imageView

      1 public class RoundAngleImageView extends ImageView {
      2     //cn.dpocket.moplusand.uinew是app的包名 manifest文件里面
      3     private static final String NAMESPACE = "http://schemas.android.com/apk/res/cn.dpocket.moplusand.uinew";
      4     private Paint paint;
      5     //如果不在xml属性里面设置自定义属性 默认值为5dp
      6     private int roundWidth = 5;
      7     private int roundHeight = 5;
      8     private Paint paint2;
      9     public RoundAngleImageView(Context context) {
     10         super(context);
     11         init(context,null);
     12     }
     13 
     14     public RoundAngleImageView(Context context, AttributeSet attrs) {
     15         super(context, attrs);
     16         init(context,attrs);
     17     }
     18 
     19     private void init(Context context, AttributeSet attrs) {
     20 
     21         if(attrs != null) {
     22             roundWidth= attrs.getAttributeIntValue(NAMESPACE,"roundWidth",0);
     23             roundHeight= attrs.getAttributeIntValue(NAMESPACE, "roundHeight", 0);
     24         }else {
     25             float density = context.getResources().getDisplayMetrics().density;
     26             roundWidth = (int) (roundWidth*density);
     27             roundHeight = (int) (roundHeight*density);
     28         }
     29 
     30         paint = new Paint();
     31         paint.setColor(Color.WHITE);
     32         paint.setAntiAlias(true);
     33         paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
     34 
     35         paint2 = new Paint();
     36         paint2.setXfermode(null);
     37     }
     38 
     39     @Override
     40     public void draw(Canvas canvas) {
     41         Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
     42         Canvas canvas2 = new Canvas(bitmap);
     43         super.draw(canvas2);
     44         drawLiftUp(canvas2);
     45         drawRightUp(canvas2);
     46         drawLiftDown(canvas2);
     47         drawRightDown(canvas2);
     48         canvas.drawBitmap(bitmap, 0, 0, paint2);
     49         bitmap.recycle();
     50     }
     51 
     52     private void drawLiftUp(Canvas canvas) {
     53         Path path = new Path();
     54         path.moveTo(0, roundHeight);
     55         path.lineTo(0, 0);
     56         path.lineTo(roundWidth, 0);
     57         path.arcTo(new RectF(
     58                         0,
     59                         0,
     60                         roundWidth*2,
     61                         roundHeight*2),
     62                 -90,
     63                 -90);
     64         path.close();
     65         canvas.drawPath(path, paint);
     66     }
     67 
     68     private void drawLiftDown(Canvas canvas) {
     69         Path path = new Path();
     70         path.moveTo(0, getHeight()-roundHeight);
     71         path.lineTo(0, getHeight());
     72         path.lineTo(roundWidth, getHeight());
     73         path.arcTo(new RectF(
     74                         0,
     75                         getHeight()-roundHeight*2,
     76                         0+roundWidth*2,
     77                         getHeight()),
     78                 90,
     79                 90);
     80         path.close();
     81         canvas.drawPath(path, paint);
     82     }
     83 
     84     private void drawRightDown(Canvas canvas) {
     85         Path path = new Path();
     86         path.moveTo(getWidth()-roundWidth, getHeight());
     87         path.lineTo(getWidth(), getHeight());
     88         path.lineTo(getWidth(), getHeight()-roundHeight);
     89         path.arcTo(new RectF(
     90                 getWidth()-roundWidth*2,
     91                 getHeight()-roundHeight*2,
     92                 getWidth(),
     93                 getHeight()), 0, 90);
     94         path.close();
     95         canvas.drawPath(path, paint);
     96     }
     97 
     98     private void drawRightUp(Canvas canvas) {
     99         Path path = new Path();
    100         path.moveTo(getWidth(), roundHeight);
    101         path.lineTo(getWidth(), 0);
    102         path.lineTo(getWidth()-roundWidth, 0);
    103         path.arcTo(new RectF(
    104                         getWidth()-roundWidth*2,
    105                         0,
    106                         getWidth(),
    107                         0+roundHeight*2),
    108                 -90,
    109                 90);
    110         path.close();
    111         canvas.drawPath(path, paint);
    112     }
    113 }
    圆角imageView

    定义一个attr.xml的文件,放在values目录下面,内容如下:

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3 <declare-styleable name="RoundAngleImageView">
    4 <attr name="roundWidth" format="integer" />
    5 <attr name="roundHeight" format="integer" />
    6 </declare-styleable>
    7 </resources>
    自定义属性

    在布局文件的跟布局中 加入如下代码:

    //cn.dpocket.moplusand.uinew是app的包名  manifest文件中
    xmlns:app="http://schemas.android.com/apk/res/cn.dpocket.moplusand.uinew"

    1 <cn.dpocket.moplusand.uinew.widget.RoundAngleImageView
    2                         android:id="@+id/iv_head1"
    3                         android:layout_width="68dp"
    4                         android:layout_height="68dp"    
    5                         app:roundWidth="8"
    6                         app:roundHeight="8"
    7                         ></cn.dpocket.moplusand.uinew.widget.RoundAngleImageView>
    自定义view的全路径
  • 相关阅读:
    @Profile使用及SpringBoot获取profile值
    浅谈maven中的scope,systempath
    Maven Filter与Profile隔离生产环境与开发环境
    spring的@Value注解使用
    maven项目引入spring boot依赖之后filter不生效的问题
    SpringBoot整合Servlet的两种方式
    程序员,30岁,“理所应当”就该中年危机了吗?
    Spring Boot 2 Webflux的全局异常处理
    正经学C#_表达式与其运算符[赋值运算符]:《c#入门经典》
    正经学C#_表达式与其运算符[算术运算符]:《c#入门经典》
  • 原文地址:https://www.cnblogs.com/YyuTtian/p/5396111.html
Copyright © 2011-2022 走看看