CircularImageView 和 API 16:NullPointerException 错误

2024-01-06

我正在不同的 API 上测试我的应用程序,它似乎可以在 API 17 到 23 上工作,但我发现在 API 16 中,我无法加载我的自定义视图。我只想在一个圆圈中显示一张照片,并且我已经从此线程中获得了自定义视图的代码:如何在Android中创建圆形ImageView? https://stackoverflow.com/questions/16208365/create-a-circular-image-view-in-android

我的代码粘贴在这里:

public class CircularImageView extends ImageView {

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

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

    public CircularImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas) {

        Drawable drawable = getDrawable();

        int w = getWidth();

        if (drawable == null) {
            return;
        }

        if (getWidth() == 0 || getHeight() == 0) {
            return;
        }
        Bitmap b = ((BitmapDrawable) drawable).getBitmap();

        Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);

        Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
        canvas.drawBitmap(roundBitmap, 0, 0, null);

    }

    public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
        Bitmap sbmp;

        if (bmp.getWidth() != radius || bmp.getHeight() != radius) {
            float smallest = Math.min(bmp.getWidth(), bmp.getHeight());
            float factor = smallest / radius;
            sbmp = Bitmap.createScaledBitmap(bmp, (int) (bmp.getWidth() / factor), (int) (bmp.getHeight() / factor), false);
        } else {
            sbmp = bmp;
        }

        Bitmap output = Bitmap.createBitmap(radius, radius,
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, radius, radius);

        paint.setAntiAlias(true);
        paint.setFilterBitmap(true);
        paint.setDither(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(Color.parseColor("#BAB399"));
        canvas.drawCircle(radius / 2 + 0.7f,
                radius / 2 + 0.7f, radius / 2 + 0.1f, paint);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(sbmp, rect, rect, paint);

        return output;
    }
}

错误发生在这一行:

    if (bmp.getWidth() != radius || bmp.getHeight() != radius) 

这是日志猫:

01-09 15:09:51.185 2119-2119/? E/AndroidRuntime:致命异常:main java.lang.NullPointerException 在 com.example.simon.customshapes.CircularImageView.getCroppedBitmap(CircularImageView.java:59) 在 com.example.simon.customshapes.CircularImageView.onDraw(CircularImageView.java:51) 在 android.view.View.draw(View.java:13458) 在 android.view.View.getDisplayList(View.java:12409) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.draw(View.java:13461) 在 android.view.View.getDisplayList(View.java:12409) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.getDisplayList(View.java:12407) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.support.v7.widget.RecyclerView.drawChild(RecyclerView.java:3588) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.draw(View.java:13461) 在 android.support.v7.widget.RecyclerView.draw(RecyclerView.java:3097) 在 android.view.View.getDisplayList(View.java:12409) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2806) 在 android.view.View.draw(View.java:13461) 在 android.view.View.getDisplayList(View.java:12409) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.getDisplayList(View.java:12407) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.draw(View.java:13461) 在 android.support.v4.view.ViewPager.draw(ViewPager.java:2262) 在 android.view.View.getDisplayList(View.java:12409) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.support.design.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1077) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.getDisplayList(View.java:12407) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.getDisplayList(View.java:12407) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.getDisplayList(View.java:12407) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.draw(View.java:13461) 在 android.widget.FrameLayout.draw(FrameLayout.java:467) 在 android.view.View.getDisplayList(View.java:12409) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在 android.view.ViewGroup.dispatchDraw(ViewGroup.java:2799) 在 android.view.View.getDisplayList(View.java:12407) 在 android.view.View.getDisplayList(View.java:12453) 在 android.view.View.draw(View.java:13182) 在 android.view.ViewGroup.drawChild(ViewGroup.java:2929) 在一个

我无法在 Android API 16 中绘制圆形图像视图是否有原因?


好吧,因为您的位图为空并且可绘制对象并不是唯一可能出现错误的地方copy(Bitmap, boolean) http://developer.android.com/reference/android/graphics/Bitmap.html#copy(android.graphics.Bitmap.Config,%20boolean).

如果你查看文档

如果不支持转换,或者分配器失败,则返回 NULL。

尝试使用较小的图像,因为这可能是内存不足的迹象。您还应该针对可能返回的空值添加一些防范措施,例如在这种情况下只绘制普通位图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CircularImageView 和 API 16:NullPointerException 错误 的相关文章

  • 带身份验证的 MediaPlayer RTSP 视频流

    我能够在未经授权的情况下从网络摄像机流式传输视频 但现在我需要在授权的情况下执行此操作 我发现很少有信息表明 Android 不支持 RTSP 身份验证 但我发现另一条信息表明 通过使用该方法添加标头 可以在 API 级别 14 中实现身份
  • 致命异常:Google 地图 V2 中的 GLThread、StackOverflowError

    我正在实施 Google 地图 V2 并利用从外部 GPX 文件接收的交付路线 设备路径 设备当前位置和交付点位置 问题是它大多数时候都有效 我收到的错误 当它不起作用时 是下一个 03 16 20 48 37 811 I dalvikvm
  • 从 admob 独立 SDK 切换到 Google Play 服务 SDK 时,apk 大小会膨胀

    使用 Admob SDK 我的 apk 大小为 230Kb 当用 google play services SDK 替换 Admob SDK 时 它是 1 5MB 膨胀了 6 倍以上 我想完整的 Google Play 服务客户端 SDK
  • android新手需要了解“?android:attr/actionBarSize”

    我正在经历拉尔斯 沃格尔的教程 http www vogella com articles AndroidFragments article html在使用 Fragments 时 我遇到了以下代码 android layout margi
  • Android/java:从 ProGuard 过渡/迁移到 R8?

    我想知道如何从ProGuard to R8 我是否应该从 Gradle 文件中删除与 Proguard 相关的行并添加android enableR8 true线代替 Thanks Proguard 由 GuardSquare 开发和维护
  • 通过 Intent 从文件管理器中选择文件

    我想做的 我想获取文件字符串形式的路径 我通过 Android 文件管理器选择该路径 我拥有的 Intent intent new Intent Intent ACTION GET CONTENT intent setType startA
  • Firebase 云消息传递 - 如何验证令牌?

    我正在使用 Firebase Cloud Messaging FCM 并且每次在客户设备上生成新令牌时 都会根据下面的缩写代码 我将此新令牌发送到我的服务器数据库 云 并将其保存在其中 以便能够发送未来推送通知使用 CFM API 从服务器
  • 获取包含位图支持的画布的 Android 视图上的点的像素颜色值

    我正在尝试找出获取给定点上像素颜色值的最佳方法View http developer android com reference android view View html 我可以通过三种方式写入视图 我设置了背景图像View setBa
  • 带有内容提供商的小部件;无法使用ReadPermission?

    所以我刚刚为我的应用程序实现了一个小部件 它通过我的数据库从数据库获取数据ContentProvider 我在清单中定义了自己的读 写权限 声明我使用它们 似乎没有什么区别 并在内容提供程序中要求它们
  • 具有多个字符串的列表视图

    我正在尝试创建一个包含多个字符串的列表视图 现在我有一个可以实现的功能 while i lt 10 GETS DATA FROM WEBPAGE ETC a DATAFROMWEBPAGE1 b DATAFROMWEBPAGE2 c DAT
  • 通过覆盖滑动调整图像大小不会调整图像大小

    我在用着Glide下载并显示图像 但是 当我尝试调整图像大小时 它不会这样做 我得到随机大小 或者可能是图像的实际大小 这是我用于通过 Glide 加载的代码 Glide with context load file getUrl asBi
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • Eclipse Android 模拟器 - 键盘不工作

    我刚刚更新到最新的 SDK 版本 16 使用最新版本的 API 16 创建了新版本的 AVD 并且我的硬件键盘在模拟器上不再工作 甚至我的其他 avd 使用旧版本的 sdk 任何想法如何解决这一问题 您的 AVD 的 键盘支持 硬件属性是否
  • android device.getUuids 返回 null

    我正在尝试使用低功耗蓝牙 BLE 通过 Android 应用程序连接到 Arduino Uno 我正在 Android Studio 上进行开发 使用 Samsung Galaxy S4 和 Android 版本 5 0 1 进行测试我点击
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 无法在 Android Studio 中运行项目

    当我尝试在 Android Studio 中运行我的项目时 我收到以下错误消息 Execution failed for task CricHQ dexDebug gt com android ide common internal Log
  • 可下载字体例外

    我决定使用可下载字体 https developer android com guide topics ui look and feel downloadable fonts html在我的项目中 IS 按照指南中的建议实施了所有内容 当我
  • 测试应用内结算:“发布者无法购买此商品”

    我的应用程序似乎已准备好在我的设备上进行应用内购买程序的 现实生活 测试 但是 我在 Play 商店中收到 发布商无法购买此商品 的错误消息 现在 我应该如何测试这个 我不想通过仅用于测试的虚拟帐户重新安装手机来丢失手机的配置 在开发者控制
  • 如何在 Android 应用程序退出之前进行一些清理?

    当我的 Android 应用程序终止时 是否有某种 onTerminate 方法可以进行一些清理 我想清除一些 SharedPreferences 我有一个活动 它保持几个数字的运行平均值 并将其存储在 SharedPreference 中
  • 在android中测量不规则多边形的面积

    我正在开发一个应用程序 在其中我在地图上绘制多边形 并且我使用的地图不是谷歌 它的Mapsforge开源离线地图库 我可以通过将地理点转换为像素点来轻松在地图上绘制多边形 但在这里我想发现是不规则的多边形 为此我做了很多尝试 但它让我失败了

随机推荐

  • 无法启动 springboot 管理,java.lang.NoClassDefFoundError: org/springframework/cloud/netflix/zuul/filters/TraceProxyRequestHelper

    当我创建示例项目时尝试使用 spring boot admin 遵循 http codecentric github io spring boot admin 1 4 1 http codecentric github io spring
  • 静态绑定和动态绑定有什么区别?

    绑定时间可以分为两种类型 静态和动态 静态绑定和动态绑定有什么区别 您能举一个简单的例子来进一步说明吗 用最一般的术语来说 静态绑定意味着引用已解析在编译时 Animal a new Animal a Roar The compiler c
  • 类型级别数算术

    我正在研究 F 的类型推断器 尝试让类型级别的自然数正常工作 这是我设法开始工作的部分 type Zero Zero type Succ lt a gt None type True True type False False type I
  • xvalue 不都是左值和右值吗?

    我读了这个answer https stackoverflow com a 27364969引起我注意的部分是 int i int p i int f int g int h h prvalue g glvalue xvalue f glv
  • 在 IIS 上部署plotly dash

    我正在尝试将一个阴谋破折号部署到 IIS 首先 我按照链接中的说明进行操作 IIS 上的 Flask James Polera https netdot co 2015 03 09 flask on iis 然后当我使用这个脚本时它就可以工
  • 我可以使用 perl 创建数据透视表吗?

    我使用 Excel Writer XLSX 模块使用 Perl 生成 Excel 文件 我把数据放在一张纸上 我想在创建 Excel 文件时自动创建包含该数据的数据透视表和图表 数据透视表和图表需要有过滤器 所以我可以选择月 周 状态 部门
  • Kafka主题未被删除

    我使用的是卡夫卡 0 10 0 1 集群中有 3 个代理 我发出了删除命令 删除了近 10 个一个月以来没有使用过的主题 我检查过 没有消费者注册这些主题 他们的日志大小也没有增加 然而 已经过去5个多小时了 那些话题还没有被删除 它们只是
  • 为什么使用迭代器而不是数组索引?

    采取以下两行代码 for int i 0 i lt some vector size i do stuff 和这个 for some iterator some vector begin some iterator some vector
  • PHP 的 T_VAR 错误

    我正在开发一个 html 表单 它将数据发送到一个显示它的 php 文件 最终我会让 php 将数据发送到 mysql 数据库 当我提交表单时 出现 php 错误 解析错误 语法错误 第 2 行 home2 rocksoli public
  • 如何从测试导航器中删除 Xcode Swift 测试类?

    Xcode 测试导航器显示测试用例类的列表 我想删除一个测试用例类 因为不再需要它 我尝试过许多典型的方法 例如按删除键 或查找 图标 或 删除 菜单项 或在 Apple Xcode 文档中搜索帮助 我找到了这个解决方法 在项目导航器中 从
  • Facebook API 营销:创建自定义受众的问题

    我尝试通过 APPUID 将用户添加到自定义受众 我确实发布到网址https graph facebook com v2 10 CUSTOM AUDIENCE ID users https graph facebook com v2 10
  • Emacs 日历:显示超过 3 个月?

    在 Emacs 中 当您使用以下命令显示日历时M x calendar 您可以在一个只有 8 行高的新窗口中显示三个月的信息 上个月 本月和下个月 是否可以在全尺寸窗口中生成十二个月的日历 12 个月日历 按月滚动 向前 向后 Scroll
  • 检测由于违反唯一约束而导致的 mysql 更新/插入失败

    这有点类似于这个问题 PHP MySQL INSERT 由于唯一约束而失败 https stackoverflow com questions 2756186 php mysql insert fails due to unique con
  • 如何从 MS SQL 数据表中检索列默认值

    我在用DataAdapter FillSchema从 MS SQL 检索表的架构 不幸的是 这不会返回列的默认值 当我需要检查数百个表时 有没有一种方法可以快速有效地检索此值作为架构的一部分 Thanks 默认值仅在行插入时确定 作为替代方
  • 如果 WPF 应用程序强制关闭或崩溃,处理 WPF 关闭事件

    我有一台名为 GameServer 的服务器 它持续运行 并且多个 ClientApplication 正在不同的不同机器上运行 当用户登录到服务器时 我将根据登录用户将一些数据保存到服务器 注销后我将对数据库以及我为登录用户对服务器所做的
  • 使用 Python 格式化 APNS 样式的 JSON 消息以与 Amazon SNS 一起使用

    我正在创建一个 iOS 应用程序 对于您的推送通知 我们使用 Amazon Simple Notification Service SNS SNS 很棒 但文档却相当稀疏 我在用着boto http docs pythonboto org
  • 使用“type”关键字和路径相关类型覆盖类型

    假设我有这样的代码 trait Holder type Value def put v Value class JsonHolder extends Holder override type Value String def put v J
  • Laravel Eloquent - 关系上的firstOrCreate()

    当我尝试firstOrCreate 在另一个模型的关系上 它不起作用 Client find id gt users gt firstOrCreate array email gt email 这会返回一个错误说 调用未定义的方法 Illu
  • 如何在我的 Grails 应用程序中使用 servlet?

    我需要使用一些实际上是 servlet 的连接器 我怎样才能在 Grails 中做到这一点以及 web xml 呢 如何配置 servlet 的 url 我实际上这里有一个 Spring 应用程序 我正在尝试将其转换为部分 Grails 应
  • CircularImageView 和 API 16:NullPointerException 错误

    我正在不同的 API 上测试我的应用程序 它似乎可以在 API 17 到 23 上工作 但我发现在 API 16 中 我无法加载我的自定义视图 我只想在一个圆圈中显示一张照片 并且我已经从此线程中获得了自定义视图的代码 如何在Android