• Android launcher 循环优化


    CyanogenMod 7内置的launcher是基于ADW的,自己也刷过cm7总得感觉还不错。launcher的循环功能是一个特性,不过体验并不好。尤其是在临界切换时,壁纸的突然跳跃,朋友手机上的360桌面也有这个问题,于是琢磨能不能在看懂的基础上进行一些优化:

    壁纸的移动和变化主要是由系统android.app.WallpaperManager来维护,应用要控制壁纸只需要2个步骤:

    1.实例化一个WallpaperManager : 

    private final WallpaperManager mWallpaperManager;

    2.调用WallpaperManager 相关方法:

    mWallpaperManager.setWallpaperOffsetSteps(0.5f, 0 );
    mWallpaperManager.setWallpaperOffsets(getWindowToken(), 0.5f, 0);

    通过研究代码发现每次在onTouchEvent和computeScroll时都会调用updateWallpaperOffset,然后再调用WallpaperManager 的方法来对壁纸进行操作。

    updateWallpaperOffset()中油判断语句:

    if(getScrollX()>0 && getScrollX()<getChildAt(getChildCount() - 1).getLeft())

    意思是只有ScrollX()大于0小于当前屏幕跨度的前提下壁纸才会移动,循环桌面的临界切屏是小于0或大于屏幕跨度的。

    现象就是只会在临界切屏完成后壁纸进行一次切换,没有一个渐变和交互的过程,再加上壁纸是从一段到另外一端,

    就产生了很突兀的用户体验。

    原因找到了,于是就在这里进行相关的优化:

     private void updateWallpaperOffset(int scrollRange) 

        {
        if(getScrollX() >= -(float)scrollRange / (getChildCount() - 1))
        {
        mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 0 );
        float percent = mScrollX/(float)scrollRange;
        if(percent > 1)
        {
        percent = -(float)(percent - 1 - 1.0f / (getChildCount() - 1));
        }
        else if(percent < 0)
        {
        percent = (float)(1 - 1.0f / (getChildCount() - 1) - percent);
        }
        mWallpaperManager.setWallpaperOffsets(getWindowToken(), 
        percent , 0);
        }
        //add for desktop looping
        }

    修改后的效果是临界切屏也会有一个滑动效果,和其他屏切换维持一致性。


  • 相关阅读:
    (转)const变量通过指针修改问题
    sleep wait yeild join
    做事贵在坚持
    我的学习进度
    织梦dedecms后台添加图片style全部都变成st<x>yle的解决办法
    调用DEDE日期时间格式整理大全
    Arcgis andoid开发之应用百度地图接口实现精准定位与显示
    jquery自定义插件——window的实现
    lzugis—搭建属于自己的小型的版本控制SVN
    lzugis——Arcgis Server for JavaScript API之自定义InfoWindow
  • 原文地址:https://www.cnblogs.com/aaa2832/p/2594048.html
Copyright © 2020-2023  润新知