android属性动画低版本适配

新入职的公司的用户主要是发展中国家用户,用户的手机配置普遍较低。入职第二周的任务是适配android2.3以上的机型,下面将在适配过程中遇到的问题进行整理。

  1. 关于用到的第三方的sdk版本高于我需要兼容的版本,这个我额外的记录了一篇文章
  2. 关于项目中的属性动画,属性动画是android 11的时候出来的,我使用的是NineOldAnroids, 使用这个库的时候,发现位移动画做不了,代码如下:
   ObjectAnimator animSpeedX = ObjectAnimator.ofFloat(v, "X", targetX, onlineDeviceX);
   ObjectAnimator animSpeedY = ObjectAnimator.ofFloat(v, "Y", targetY, onlineDeviceY);

查看NineOldAndroids的代码后,

static {
       PROXY_PROPERTIES.put("alpha", PreHoneycombCompat.ALPHA);
       PROXY_PROPERTIES.put("pivotX", PreHoneycombCompat.PIVOT_X);
       PROXY_PROPERTIES.put("pivotY", PreHoneycombCompat.PIVOT_Y);
       PROXY_PROPERTIES.put("translationX", PreHoneycombCompat.TRANSLATION_X);
       PROXY_PROPERTIES.put("translationY", PreHoneycombCompat.TRANSLATION_Y);
       PROXY_PROPERTIES.put("rotation", PreHoneycombCompat.ROTATION);
       PROXY_PROPERTIES.put("rotationX", PreHoneycombCompat.ROTATION_X);
       PROXY_PROPERTIES.put("rotationY", PreHoneycombCompat.ROTATION_Y);
       PROXY_PROPERTIES.put("scaleX", PreHoneycombCompat.SCALE_X);
       PROXY_PROPERTIES.put("scaleY", PreHoneycombCompat.SCALE_Y);
       PROXY_PROPERTIES.put("scrollX", PreHoneycombCompat.SCROLL_X);
       PROXY_PROPERTIES.put("scrollY", PreHoneycombCompat.SCROLL_Y);
       PROXY_PROPERTIES.put("x", PreHoneycombCompat.X);
       PROXY_PROPERTIES.put("y", PreHoneycombCompat.Y);
   }

将X,Y改成了小写,问题就处理了。通过查看android11以上的自带的源码,

  static String getMethodName(String prefix, String propertyName) {
        if (propertyName == null || propertyName.length() == 0) {
            // shouldn't get here
            return prefix;
        }
        char firstLetter = Character.toUpperCase(propertyName.charAt(0));
        String theRest = propertyName.substring(1);
        return prefix + firstLetter + theRest;
    }

是将属性的第一个字母转换成了大写,而在NineOldAndroids中的实现是如下:

 static Property<View, Float> Y = new FloatProperty<View>("y") {
        @Override
        public void setValue(View object, float value) {
            AnimatorProxy.wrap(object).setY(value);
        }

        @Override
        public Float get(View object) {
            return AnimatorProxy.wrap(object).getY();
        }
    };
/** Whether or not the current running platform needs to be proxied. */
    public static final boolean NEEDS_PROXY = Integer.valueOf(Build.VERSION.SDK).intValue() < Build.VERSION_CODES.HONEYCOMB;
 /**
     * Create a proxy to allow for modifying post-3.0 view properties on all
     * pre-3.0 platforms. <strong>DO NOT</strong> wrap your views if you are
     * using {@code ObjectAnimator} as it will handle that itself.
     *
     * @param view View to wrap.
     * @return Proxy to post-3.0 properties.
     */
    public static AnimatorProxy wrap(View view) {
        AnimatorProxy proxy = PROXIES.get(view);
        // This checks if the proxy already exists and whether it still is the animation of the given view
        if (proxy == null || proxy != view.getAnimation()) {
            proxy = new AnimatorProxy(view);
            PROXIES.put(view, proxy);
        }
        return proxy;
    }
 public void setY(float y) {
        View view = mView.get();
        if (view != null) {
            setTranslationY(y - view.getTop());
        }
    }

通过上面的代码,可以知道,当sdk的版本小于11的时候,写成了大写的X,Y,就找不到对应的代理。在android11以下的源码中,没有,setX,setY之类的方法,NineOldAndroids 虚拟了这些方法出来,做了自己的实现。
除了上面的属性动画外,因为android2.3没有提供setX,setY,setAlpha一类的方法,我也是使用NineOldAndroids 中提供的方案兼容android2.3 的。例如:

ObjectAnimator.ofFloat(safeIcon,"alpha",1).start();
ViewHelper.setTranslationY(giftTagView,-DensityUtils.dp2px(getActivity(), 2));
  1. 关于屏幕适配,今天处理了一个SAMSUNG GF-s5360,屏幕是240*320,处理这个视频,我新增了一个layout-ldpi文件夹,然后做出对应的界面优化。在这里推荐一个开发助手软件,这个对开发很有帮助。

  2. 优化了android 自定义控件的适配问题,这个处理的方式是依赖提供的各种文件夹来完成的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容