Android源码下载:桌面APP

移动开发 Android
该源码是基于Android系统的Launcher原理进行设计和编写。主要包含以下功能模块:利用自定义GridView(或继承ViewGroup)实现GridView控件的拖动;GridView长按拖动的动画效果;GridView切屏拖动;Activity不同生命周期对GridView数据的刷新及保存;数据库DBUtil的使用。

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

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

责任编辑:闫佳明 来源: 网络整理
相关推荐

2015-01-22 14:12:40

Android源码APP启动引导

2013-08-06 15:13:57

Android 4.3源码

2011-09-07 14:20:42

Android Wid组件

2015-02-27 16:36:21

Android源码屏幕画笔Demo

2015-01-21 15:28:16

Android源码新浪微博

2015-01-15 16:25:23

Android源码Socket通信

2015-01-23 16:29:44

2015-01-20 17:09:21

Android源码手势锁

2015-01-22 15:44:55

Android源码音乐播放器

2015-01-14 14:22:30

Android源码游戏

2021-08-10 20:41:33

AndroidApp流程

2015-02-27 16:03:26

Android源码Bluetooth_4BLE蓝牙通信

2015-01-21 16:07:57

Android源码验证码倒计时

2013-05-28 10:39:44

Android开发移动开发

2014-12-17 15:23:03

Android网络阅读器源码

2014-12-30 11:04:39

懒人笔记

2015-01-22 16:04:06

iPhone

2015-01-20 17:01:30

Android源码QQdemo

2015-01-19 13:42:08

Android游戏源码蓝牙对战五子棋

2014-08-18 14:18:07

Android桌面悬浮
点赞
收藏

51CTO技术栈公众号