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的全路径

时间: 2024-10-19 01:38:53

17 自定义属性及圆角imageView的相关文章

Android自己定义圆角ImageView

我们常常看到一些app中能够显示圆角图片.比方qq的联系人图标等等,实现圆角图片一种办法是直接使用圆角图片资源,当然假设没有圆角图片资源.我们也能够自己通过程序实现的,以下介绍一个自己定义圆角ImageView的方法: package com.yulongfei.imageview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; impo

Android自定义圆角ImageView

我们经常看到一些app中可以显示圆角图片,比如qq的联系人图标等等,实现圆角图片一种办法是直接使用圆角图片资源,当然如果没有圆角图片资源,我们也可以自己通过程序实现的,下面介绍一个自定义圆角ImageView的方法: package com.yulongfei.imageview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; impor

android 圆角ImageView类,可设置弧度

1 public class RoundImageView extends ImageView { 2 private Paint paint; 3 private int roundWidth = 50; 4 private int roundHeight = 50; 5 private Paint paint2; 6 7 public RoundImageView(Context context, AttributeSet attrs, int defStyle) { 8 super(con

自定义属性之LinearLayout ImageView TextView模拟图片文字按钮

一.资源文件: 1.文字选择器: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:color="#FF111111"/>

AndroidCatalog

1 跟随手指移动的球 2 listview的item全部漏出才显示 3 popupwindow提示框 4 手机震动 5 状态选择器 6 .9图 7 MD5加密 8 屏幕适配 9 子线程更新UI 10 键盘显示与隐藏 11 Activity启动模式 12 Bitmap缩放 13 监听音量键事件 14 去掉标题栏 15 设置控件不可点击 16 不让子view获取焦点 17 自定义属性及圆角imageView 18 手动发广播扫描sd卡 19 shape 20 TextView显示阴影

iOS 高效添加圆角效果实战讲解

圆角(RounderCorner)是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.但很多人并不清楚如何设置圆角的正确方式和原理.设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点讨论的话题.我查阅了一些现有的资料,收获良多的同时也发现了一些误导人错误.本文总结整理了一些知识点,概括如下: 设置圆角的正确姿势及其原理 设置圆角的性能损耗 其他设置圆角的方法,以及最优选择 我为本文制作了一个 demo,读者可以在我的 github 上 clone 下来:CornerRadius

Android图片圆角效果

一般来说图片加圆角可以使用 Java 的方式来进行, 对图片略加处理即可, 但也可以使用纯XML+Nice-Patch图片来进行, 这样的速度会更快. 如果背景是纯色的情况下建议使用此方法. 原理则是利用frameLayout在图片上加一个遮盖图片, 从而达到圆角效果. 背景图片: 一张中间透明, 四个边角带有颜色的遮盖图片即可, 可以使用ps画一个带圆角的矩形, 然后反选并填充边角颜色即可. Layout文件:01 02<framelayout< p=""> <

Android圆角图片封装类

你还在为处理圆角而在项目里到处copy 处理代码吗?你还在不停动态生成圆角bitmap后再使用吗?no,代码里不需要知道这些, 如果一个view需要圆角,xml直接使用下面的RoundImageView即可, 代码逻辑根本不需要任何干涉,代码中你依然当做这个是一个普通的ImageView完全没有问题,这就是关键. 而且省去了bitmap的动态生成,避免了内存开销,跟界面卡顿(原始处理圆角的方法,再处理图片比较多的时候,如果不用单独thread性能并不好) 注:如果你想让一个布局you圆角效果也是

iOS之设置用户头像的圆角

1. 显示用户头像用UIImageView实现,添加默认图片后效果如下图所示,头像显示为矩形图片. 代码实现: // ViewController.m // SetUserImage // // Created by jerei on 15-4-26. // Copyright (c) 2015年 jerei. All rights reserved. // #import "ViewController.h" #define kWidth self.view.bounds.size.