Android ImageView 四个角自定义角度,以及角度的变换

这篇具有很好参考价值的文章主要介绍了Android ImageView 四个角自定义角度,以及角度的变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

在正常开发过程中,我们经常会发现一些图片有各种各样的显示,有圆角、直角、圆形、不规则图形等?比较常见的是圆形,还有圆角。今天我们将讲述圆角、四个角不同度数以及通过圆角巧妙变成圆形

1.如果大家不熟悉圆形或者path的以及canvas.clipPath,可以参考我的一篇文章:圆形头像  

2.今天我们依旧通过Canvas的画布剪切来完成,有所不同的是,这次的path不是一个圆,而是在矩形中画圆addRoundRect

废话不多说:直接上代码

public class MyRoundJiaoImageView extends AppCompatImageView {

    private int leftTopRadius;
    private int rightTopRadius;
    private int leftBottomRadius;
    private int rightBottomRadius;
    private int allRadius;

    public MyRoundJiaoImageView(Context context) {
        super(context);
    }

    public MyRoundJiaoImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initAtter(context, attrs);
    }

    private void initAtter(Context context, AttributeSet attrs) {
        TypedArray typed = context.obtainStyledAttributes(attrs, R.styleable.roundRadion);

        if (typed == null)
            return;


        leftTopRadius = typed.getInt(R.styleable.roundRadion_mleftTopRadius, 0);
        rightTopRadius = typed.getInt(R.styleable.roundRadion_mrightRadius, 0);
        leftBottomRadius = typed.getInt(R.styleable.roundRadion_mleftButtomRadius, 0);
        rightBottomRadius = typed.getInt(R.styleable.roundRadion_mrightButtomRadius, 0);
        allRadius = typed.getInt(R.styleable.roundRadion_allRadius, 0);


        typed.recycle();
    }


    @Override
    protected void onDraw(Canvas canvas) {

        int width = getMeasuredWidth();
        int height = getMeasuredHeight();
        Path path = new Path();
        /*向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8*/

        if (allRadius > 0) {
            float rids[] = {allRadius, allRadius, allRadius, allRadius, allRadius, allRadius, allRadius, allRadius};
            path.addRoundRect(new RectF(0, 0, width, height), rids, Path.Direction.CW);

        } else {
            float rids[] = {leftTopRadius, leftTopRadius, rightTopRadius, rightTopRadius, leftBottomRadius, leftBottomRadius, rightBottomRadius, rightBottomRadius};
            path.addRoundRect(new RectF(0, 0, width, height), rids, Path.Direction.CW);
        }


        canvas.clipPath(path);

        super.onDraw(canvas);
    }

    public void setAllRadius(int allRadius) {
        this.allRadius = allRadius;
        invalidate();
    }
}

讲解:

如果对画布的操作,需要在onDraw的super之前完成,否则将不会生效

1.我们这边是通过自定义圆角角度,如何自定义参数,可参考Android View自定义参数declare-styleable介绍与使用 

参数如下:

<declare-styleable name="roundRadion">

    <attr name="mleftTopRadius" format="integer" />
    <attr name="mrightRadius" format="integer" />
    <attr name="mleftButtomRadius" format="integer" />
    <attr name="mrightButtomRadius" format="integer" />
    <attr name="allRadius" format="integer" />

</declare-styleable>

2.path的addRoundRect的使用

public void addRoundRect(RectF rect, float[] radii, Direction dir)

RectF :矩形的范围

radii:四个角的角度参数,正常需要8个值,因为我们知道一个角确定下来需要两个角度的坐标

Android ImageView 四个角自定义角度,以及角度的变换

所以这个数组正常就是:

float rids[] = {leftTopRadius, leftTopRadius, rightTopRadius, rightTopRadius, leftBottomRadius, leftBottomRadius, rightBottomRadius, rightBottomRadius};



A.(leftTopRadius, leftTopRadius)

B(rightTopRadius, rightTopRadius)

C(leftBottomRadius, leftBottomRadius)

D(rightBottomRadius, rightBottomRadius)

Android ImageView 四个角自定义角度,以及角度的变换

坐标里面的值需一样,否则开角不同,会导致不生效 

Direction :绘制的方向

3.只要我们path路径准备好,canvs绘制路径即可。

说明:

1.这种剪切是支持不同角的角度值剪切,但是,图片的画布只是针对前景色,也就是ImageView的drawable或者src的部分,背景大小还是原来的尺寸,接下来我们将会用一组动画说明。

2.当角度都是360度的时候,这个图片就是圆形,我们常见的头像做法。这种剪切方法可以剪切出任意效果,只要我们path绘制的够完美。

Android ImageView 四个角自定义角度,以及角度的变换文章来源地址https://www.toymoban.com/news/detail-410660.html

到了这里,关于Android ImageView 四个角自定义角度,以及角度的变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 已知中心点、长宽和旋转角度,求矩形的四个顶点坐标(Python)

    本次实现有几个前提: 已知的信息如下形式:[x_center, y_center, w, h, angle],其中默认 w w w 是矩形最长的边,即 w h w h w h 。 已知的旋转角度 θ theta θ 是矩形的最长边 w w w 相对于 x x x 坐标轴的旋转角度 旋转角度 θ theta θ 的旋转区间在 [ 0 , π ] [0, pi] [ 0 , π ] 可以将情况分为两

    2024年02月05日
    浏览(88)
  • Android入门教程 | ImageView 图片显示

    为了让App界面更美观生动,我们可以放上图片。 显示图片是“刚需”。不论是书籍,报纸,网站,都有显示图片的需求。毕竟“无图无真相”。 在 Android 应用开发中,我们通常使用 ImageView 来显示图片。 ImageView的主要属性 ImageView的使用 ImageView经常用来显示图片。例如直接显

    2024年02月03日
    浏览(61)
  • Android:ImageView xml方式配置selector 图片切换

    1、在 res/drawable 目录下创建一个新的XML文件,比如 selector_image.xml ?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"? selector xmlns:android=\\\"http://schemas.android.com/apk/res/android\\\" !-- 背景选择器 state_pressed  按下 state_focused 获得焦点 默认 图片 --     item android:state_pressed=\\\"true\\\" android:drawable=\\\"@drawable/image_pressed\\\"

    2024年02月15日
    浏览(47)
  • 一起Talk Android吧(第五百四十回:ImageView的缩放)

    各位看官们大家好,上一回中咱们说的例子是\\\"RxJava中的总结\\\",本章回中介绍的例子是\\\"I mageView的缩放 \\\"。闲话休提,言归正转,让我们一起Talk Android吧! 通常情况下ImageView组件主要用来显示图片,因此需要使用图片当作显示内容,这个可以通过 ImageView 的src属性来设置被显示的

    2023年04月09日
    浏览(49)
  • Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin

      初始化状态,ImageView里面只是显示一张fitcenter被缩放的原图,当手指在图片上双击后(记录双击点位置:mCurX,mCurY)画一个红色小圆圈标记双击位置,放大图片,然后把放大后的图的(原mCurX,mCurY)位置移动到区域中心点位置,用大的红色圆圈标记。   双击:     放大图

    2024年01月21日
    浏览(48)
  • Android LinearLayout dynamic add child ImageView,Glide load,kotlin

    Android LinearLayout dynamic add child ImageView,Glide load,kotlin  images.xml image.xml Android Glide onlyRetrieveFromCache downloadOnly submit ,kotlin_zhangphil的博客-CSDN博客 【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,

    2024年02月14日
    浏览(44)
  • Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin

      在 Android双击图片放大移动图中双击点到ImageView区域中心,Kotlin-CSDN博客 基础上,这次使用ScaleGestureDetector检测两根手指的缩放动作,记录两根手指的中心点位置,根据ScaleGestureDetector检测到的缩放因子(系数),放大原图,并移动放大前两根手指中心点在原图的位置移动到

    2024年01月23日
    浏览(59)
  • Android挖取原图手指触点区域RectF(并框线标记)放大到ImageView宽高与矩阵mapRadius,Kotlin

    这里 Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高,Kotlin-CSDN博客 实现的是把原图中心区域的一片小图挖取出来放大放到下面的ImageView里面,现在不再固定中心位置,而是以手指在上图的触点位置为中心位置,挖取一片区域图放大,然后放到下面的ImageView里面

    2024年03月13日
    浏览(87)
  • Android scrollTo、scrollBy、以及scroller详解 自定义ViewPager

    VelocityTracker 是一个速度跟踪器,通过用户操作时(通常在 View 的 onTouchEvent 方法中)传进去一系列的 Event,该类就可以计算出用户手指滑动的速度,开发者可以方便地获取这些参数去做其他事情。或者手指滑动超过一定速度并松手,就触发翻页。 Android scrollTo、scrollBy、以及

    2024年02月10日
    浏览(42)
  • 事务的四个特性、四个隔离级别以及数据库的常用锁

    事务的四个特性、四个隔离级别以及数据库的常用锁 四大特性 事务的四大特性,通常被称为ACID特性,是数据库管理系统(DBMS)确保事务处理的关键属性。这四大特性分别是: 原子性(Atomicity): 原子性要求事务是一个不可分割的单位,要么全部执行,要么全部不执行。如

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包