zoukankan      html  css  js  c++  java
  • Android 开发日志之仿三星Launcher

    Android 仿三星Launcher

    1、实现横向滑动分页:

    在AllApps2D.java的addApps方法中,以16个应用程序为一页存到ArrayList<ArrayList<ApplicationInfo>> mAllAppsLists

    并创建对应的GridView,将这些View添加给以ViewGroup为基类的滑动类对象。

    问题:删除某个应用程序后,其所在的页面会导致无法点击,要过好一会儿才能将应用程序的图标删除并可以点击。

    想到的当然是GridView可能没有刷新的原因,于是,在AllApps2D.java的removeApps中,试了postInvalidate/flush/等,但是没有效果,最终在基于ViewGroup的滑动类的onLayout中发现,其方法体被if(change)包着,通过打LOG,change值除了第一次为true,其它都为false,再对比Workspace.java中的同名方法,并没有用if(change)包着,于是,去掉if(change),解决。

    问题:所有应用程序初始化完毕标志

    2、实现编辑,并在拖动过程中有动画效果。

    查看android的动画效果有四种

    AlphaAnimation 渐变透明度动画效果
    ScaleAnimation 渐变尺寸伸缩动画效果
    TranslateAnimation 画面转换位置移动动画效果
    RotateAnimation 画面转移旋转动画效果

     即我们要用的是转换位置移动动画效果。

    GridView中取到View;定义每个主菜单ICON的动画起止坐标;

    for(int i = 0; i < mNeedMoveId - id; i++){
      v_s = mGridViewList.get(mCurrentPage).getChildAt(moveid);
      v_d = mGridViewList.get(mCurrentPage).getChildAt(moveid + 1);
      mAnimation_Translate = new TranslateAnimation(Animation.ABSOLUTE,0,
          Animation.ABSOLUTE,v_d.getLeft() - v_s.getLeft(),
          Animation.ABSOLUTE,0,
          Animation.ABSOLUTE,v_d.getTop() - v_s.getTop());
            
      mAnimation_Translate.setDuration(1000);       
      v_s.startAnimation(mAnimation_Translate);
      moveid--;       
    }

    problem:

    移动后如何停止到最终位置?

  • 相关阅读:
    步入大公司一年及三十而立的一些思考
    let和const
    简明学习webpack
    npm&&yarn和package.json
    基于jQuery.i18n.properties插件实现前端页面国际化
    Sequence Model
    系统性整理项目:第一篇(续篇)-osm存入PostgreSQL+PostGIS并构建路网表结构
    系统性整理项目:第一篇(环境+数据)
    window下源码编译mmcv-full==1.2.1
    多边形平滑算法-ChaikinSmoothing
  • 原文地址:https://www.cnblogs.com/jimwind/p/2679181.html
Copyright © 2011-2022 走看看