Android源码下载:桌面APP
创始人
2025-01-10 17:40:20
0次

支持平台:Android

运行环境:Eclipse

开发语言:Java

开发工具:Eclipse

源码大小:2.99MB

源码下载地址:http://down.51cto.com/data/1984783

源码简介

该源码是基于Android系统的Launcher原理进行设计和编写。

主要包含以下功能模块:

1、利用自定义GridView(或继承ViewGroup)实现GridView控件的拖动;

2、GridView长按拖动的动画效果;

3、GridView切屏拖动;

4、Activity不同生命周期对GridView数据的刷新及保存;

5、数据库DBUtil的使用。

源码运行截图

GridView单屏拖动动画效果

GridView切屏时,拖动的动画效果

GridView切屏后,对象交换

删除GridView中某一对象

源码片段

  1. //添加一个item 
  2. public void addItemView(MoveItem item) { 
  3.     mAdapter.add(item); 
  4.     this.addView(getView(mAdapter.getCount() - 1)); 
  5.     showEdit(isEditting); 
  6.     requestLayout(); 
  7. } 
  8.   
  9. @Override 
  10. public void addView(View child, int index, LayoutParams params) { 
  11.     child.setClickable(true); 
  12.     if (child.getVisibility() != View.VISIBLE) 
  13.         child.setVisibility(View.VISIBLE); 
  14.     super.addView(child, index, params); 
  15.     int pages = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage); 
  16.     if (pages > totalPage) { 
  17.         if (this.onAddPage != null) 
  18.             onAddPage.onAddOrDeletePage(totalPage, true); 
  19.         totalPage = pages; 
  20.     } 
  21. } 
  22.   
  23. //绘制Container所有item 
  24. public void refreView() { 
  25.     removeAllViews(); 
  26.     for (int i = 0; i < mAdapter.getCount(); i++) { 
  27.         this.addView(getView(i)); 
  28.     } 
  29.     totalPage = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage); 
  30.     requestLayout(); 
  31. } 
  32.   
  33. @Override 
  34. public void removeView(View view) { 
  35.     super.removeView(view); 
  36.     int pages = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage); 
  37.     if (pages < totalPage) { 
  38.         if (this.onAddPage != null) 
  39.             onAddPage.onAddOrDeletePage(totalPage, false); 
  40.         totalPage = pages; 
  41.     } 
  42. } 
  43.   
  44. @Override 
  45. public void removeViewAt(int index) { 
  46.     super.removeViewAt(index); 
  47.     int pages = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage); 
  48.     if (pages < totalPage) { 
  49.         totalPage = pages; 
  50.         if (this.onAddPage != null) 
  51.             onAddPage.onAddOrDeletePage(totalPage, false); 
  52.     } 
  53. } 
  54.   
  55.   
  56. @Override 
  57. public boolean dispatchTouchEvent(MotionEvent ev) { 
  58.     final int action = ev.getAction(); 
  59.     final float x = ev.getX(); 
  60.     final float y = ev.getY(); 
  61.     int thresholdX = DensityUtil.dip2px(mContext, 8); 
  62.     switch (action) { 
  63.     case MotionEvent.ACTION_DOWN: 
  64.         startX = (int) x; 
  65.         if (mScroller.isFinished()) { 
  66.             if (!mScroller.isFinished()) { 
  67.                 mScroller.abortAnimation(); 
  68.             } 
  69.             temChangPosition = dragPosition = pointToPosition((int) x, (int) y); 
  70.             dragOffsetX = (int) (ev.getRawX() - x); 
  71.             dragOffsetY = (int) (ev.getRawY() - y); 
  72.   
  73.             mLastMotionX = x; 
  74.             mLastMotionY = y; 
  75.             startX = (int) x; 
  76.         } 
  77.         break; 
  78.     case MotionEvent.ACTION_MOVE: 
  79.         int deltaX = (int) (mLastMotionX - x); 
  80.   
  81.         if (IsCanMove(deltaX) && Math.abs(deltaX) > thresholdX && Mode != Mode_Drag) { 
  82.             mLastMotionX = x; 
  83.             scrollBy(deltaX, 0); 
  84.             Mode = Mode_Scroll; 
  85.         } 
  86.   
  87.         if (Mode == Mode_Drag) { 
  88.             onDrag((int) x, (int) y); 
  89.         } 
  90.         break; 
  91.     case MotionEvent.ACTION_UP: 
  92.         float distance = ev.getRawX() - startX; 
  93.         if (distance > screenWidth / 6 && mCurScreen > 0 
  94.                 && Mode != Mode_Drag) { 
  95.             snapToScreen(mCurScreen - 1); 
  96.         } else if (distance < -screenWidth / 6 
  97.                 && mCurScreen < totalPage - 1 && Mode != Mode_Drag) { 
  98.             snapToScreen(mCurScreen + 1); 
  99.         } else if (Mode != Mode_Drag) { 
  100.             snapToDestination(); 
  101.         } 
  102.         if (Mode == Mode_Drag) { 
  103.             stopDrag(); 
  104.         } 
  105.         if (dragImageView != null) { 
  106.             animationMap.clear(); 
  107.             showDropAnimation((int) x, (int) y); 
  108.         } 
  109.         startX = 0; 
  110.         break; 
  111.     case MotionEvent.ACTION_CANCEL: 
  112.         showEdit(false); 
  113.     } 
  114.     super.dispatchTouchEvent(ev); 
  115.     return true; 
  116. } 
  117.   
  118. //开始拖动 
  119. private void startDrag(Bitmap bm, int x, int y, View itemView) { 
  120.     dragPointX = x - itemView.getLeft() + mCurScreen * screenWidth; 
  121.     dragPointY = y - itemView.getTop(); 
  122.     windowParams = new WindowManager.LayoutParams(); 
  123.   
  124.     windowParams.gravity = Gravity.TOP | Gravity.LEFT; 
  125.     windowParams.x = x - dragPointX + dragOffsetX; 
  126.     windowParams.y = y - dragPointY + dragOffsetY; 
  127.     windowParams.height = LayoutParams.WRAP_CONTENT; 
  128.     windowParams.width = LayoutParams.WRAP_CONTENT; 
  129.     windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
  130.             | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE 
  131.             | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
  132.             | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; 
  133.   
  134.     windowParams.format = PixelFormat.TRANSLUCENT; 
  135.     windowParams.windowAnimations = 0; 
  136.     windowParams.alpha = 0.8f; 
  137.   
  138.     ImageView iv = new ImageView(getContext()); 
  139.     iv.setImageBitmap(bm); 
  140.     dragBitmap = bm; 
  141.     windowManager = (WindowManager) getContext().getSystemService( 
  142.             Context.WINDOW_SERVICE); 
  143.     windowManager.addView(iv, windowParams); 
  144.     dragImageView = iv; 
  145.     Mode = Mode_Drag; 
  146.   
  147.     halfBitmapWidth = bm.getWidth() / 2; 
  148.     halfBitmapHeight = bm.getHeight() / 2; 
  149.   
  150.     for (int i = 0; i < getChildCount(); i++) { 
  151.         getChildAt(i).getBackground().setAlpha((int) (0.8f * 255)); 
  152.     } 
  153. } 
  154.   
  155. //停止拖动 
  156. private void stopDrag() { 
  157.     recoverChildren(); 
  158.     if (Mode == Mode_Drag) { 
  159.         if (getChildAt(dragPosition).getVisibility() != View.VISIBLE) 
  160.             getChildAt(dragPosition).setVisibility(View.VISIBLE); 
  161.         Mode = Mode_Free; 
  162.         Log.e("test", "scroll menu move"); 
  163.         mContext.sendBroadcast(new Intent("com.stg.menu_move")); 
  164.     } 
  165. } 

源码下载地址:http://down.51cto.com/data/1984783

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
只需三步,让你掌握阿尔法路由器... 请参照以下阿尔法路由器设置方法,通过浏览器进入及设置宽带路由器。经过这三个步骤的设置,基本上能够熟悉...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何更省钱? 近期特价热门硒鼓... 如今激光打印设备已经成为商务或企业的绝对主力办公设备,但采购者往往忽视了激光打印设备所用的耗材,相对...