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:

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

 

你可能感兴趣的:(Android 开发)