Android中调用隐藏类中的方法

终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~

在写Android的时候,有些类是隐藏类,因而无法直接调用,比如AnimatedRotateDrawable这个类,该类类名上有@hide标注,表明该类是一个隐藏类。若想通过该类的实例调用setFramesDuration来设置对应的帧播放时间来说,无法实现。下面通过反射的方法来调用该方法,具体代码如下:

第一句代码

	Drawable drawable = button.getDrawableTop();
        if (!(drawable instanceof Animatable))return;
        try {
             Method m1 = drawable.getClass().getDeclaredMethod("setFramesDuration",int.class);
             m1.invoke(drawable,50);
         } catch (Exception e) {
           e.printStackTrace();
         }

先看下rotate.xml里面的代码:

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/home_bottom_menu_news_refresh_night"
    android:pivotX="50%"
    android:pivotY="50%">
    <!--android:interpolator="@android:anim/accelerate_decelerate_interpolator"-->
    <!--android:framesCount = "12"-->
    <!--android:frameDuration = "100"-->
</animated-rotate>

在xml里面可以设置frameDuration来控制帧的播放时间,在Java代码中先通过AnimatedRotateDrawable获取Drawable实例,然后通过反射获取该实例对应的setFramesDuration方法Method的实例,最后通过反射m1.invoke(drawable,50)调用对应的方法。方法很简单,就是通过反射来获取隐藏类的对应方法,然后通过反射的方式调用该方法,从而完成相应的功能。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值