Android边框裁切的正确姿势实现示例

 更新时间:2023年02月16日 14:44:18   作者:流浪汉kylin  
这篇文章主要为大家介绍了Android边框裁切的正确姿势实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

今天写什么呢,没有太好的思路,就随便写一些细节的点吧。

平时我们都会接触到的一个东西就是设置view的边缘为圆角,因为默认的直角比较难看,这个是涉及比较多的场景,其它当然也有一些场景需用到非正常边框的情况,也需要裁切。

1. 设置圆角边框

一般我们怎么设置圆角边框的

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffff" />
    <stroke
        android:width="0.8dp"
        android:color="#ffffff" />
    <corners android:radius="10dp" />
</shape>

这是我们比较常做的设置边框圆角的操作,有没有过这样去设置会不会出问题?其实这样的操作只不过是改变背景而已,它可能会出现内部内容穿透的效果。

2. 使用ClipToOutline进行裁切

这个是android 5.0之后提出的方法,具体的操作是这样

public static void setRoundRect(View view) {
    try {
        view.setOutlineProvider(new ViewOutlineProvider() {
            @Override
            public void getOutline(View view, Outline outline) {
                outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), 10);
            }
        });
        view.setClipToOutline(true);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

可以看出就是调用了view的setOutlineProvider方法和setClipToOutline方法。看这个ViewOutlineProvider,它的注释是
Interface by which a View builds its Outline, used for shadow casting and clipping.

能明显看出它就是为了处理阴影和裁切的。其中我们要设置的话,主要是设置Outline outline这个对象,我们可以看看它所提供的方法

setRect

先随便拿一张图片表示原本的显示效果来做对比

调用setRect给原图进行边缘裁切

outline.setRect(view.getWidth()/4, view.getWidth()/4, view.getWidth()/4 *3, view.getHeight()/4 * 3);

得到这样的效果,注意,我的原效果是贴边的,这些裁切之后发现是不贴边的

setRoundRect的效果和setRect一样,就是多了一个参数用来设置圆角。这里就不演示了

setOval 调用setOval,它的传参和setRect一样

outline.setOval(view.getWidth()/4, view.getWidth()/4, view.getWidth()/4 *3, view.getHeight()/4 * 3);

可以看到效果

发现再裁切尺寸的同时并且把图片切成圆形,我记得很早之前,还没毕业时做圆形头像的时候还需要引用别人的第三方,现在5.0之后直接调这个就行,多方便。当然现在头像都是用Glide来做。

setAlpha和setConvexPath也一样,etAlpha是设置透明度,setConvexPath是设置路径,路径和自定义view一样用Path,我这边就不演示了

总结

Outline相对于shape来说,是真正的实现边缘裁切的,shape其实只是设置背景而已,它的view的范围还是那个正方形的范围。最明显的表现于,shape如果内容填满布局,会看到内容超出圆角,而Outline不会。当然如果你shape配合padding的话肯定也不会出现这种情况。

使用Outline也需要注意,一般的机子会在当范围超过圆之后,会一直显示圆。比如你设置radius为50是圆角的效果,但是甚至成100已经是整个边是半圆,这时你设200会发现还是半圆,但是在某些机子上200会变成圆锥,所以如果要做半圆的效果也需要去计算好radius

以上就是Android边框裁切的正确姿势实现示例的详细内容,更多关于Android边框裁切的资料请关注脚本之家其它相关文章!

相关文章

  • Android 音乐播放器的开发实例详解

    Android 音乐播放器的开发实例详解

    本文主要讲解Android 音乐播放器的开发,这里给大家提供一个简单的示例代码,和实现效果图,有需要开发音乐播放器的朋友可以参考下
    2016-08-08
  • Android FTP服务器上传文件攻略(代码详解)

    Android FTP服务器上传文件攻略(代码详解)

    这篇文章主要介绍了Android FTP服务器上传文件攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Android实现为GridView添加边框效果

    Android实现为GridView添加边框效果

    这篇文章主要为大家详细介绍了Android实现为GridView添加边框效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android实现发送短信验证码倒计时功能示例

    Android实现发送短信验证码倒计时功能示例

    本篇文章主要介绍了Android实现发送短信验证码倒计时功能示例,这里整理了详细的代码,有需要的小伙伴可以参考下。
    2017-03-03
  • Android快速实现无预览拍照功能

    Android快速实现无预览拍照功能

    这篇文章主要为大家详细介绍了Android快速实现无预览拍照功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • Action获取请求参数的三种方式

    Action获取请求参数的三种方式

    这篇文章主要介绍了Action获取请求参数的三种方式的,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android获取wifi列表的方法

    Android获取wifi列表的方法

    这篇文章主要为大家详细介绍了Android获取wifi列表的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Android实现截图分享qq 微信功能

    Android实现截图分享qq 微信功能

    在日常生活中,经常用到qq,微信截图分享功能,今天小编通过本文给大家介绍Android实现截图分享qq 微信功能,具体实现代码大家参考下本文
    2017-12-12
  • Android实现拍照、选择相册图片并裁剪功能

    Android实现拍照、选择相册图片并裁剪功能

    这篇文章主要为大家详细介绍了Android实现拍照、选择相册图片并裁剪功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android的webview支持HTML5的离线应用功能详细配置

    Android的webview支持HTML5的离线应用功能详细配置

    HTML5的离线应用功能可以使得WebApp即使在网络断开的情况下仍能正常使用这是个非常有用的功能,但如何使Webivew支持HTML5离线应用功能呢,需要的朋友可以参考下
    2012-12-12

最新评论