Android源碼下載:桌面APP
支持平臺(tái):Android
運(yùn)行環(huán)境:Eclipse
開(kāi)發(fā)語(yǔ)言:Java
開(kāi)發(fā)工具:Eclipse
源碼大?。?.99MB
源碼下載地址:http://down.51cto.com/data/1984783
源碼簡(jiǎn)介
該源碼是基于Android系統(tǒng)的Launcher原理進(jìn)行設(shè)計(jì)和編寫(xiě)。
主要包含以下功能模塊:
1、利用自定義GridView(或繼承ViewGroup)實(shí)現(xiàn)GridView控件的拖動(dòng);
2、GridView長(zhǎng)按拖動(dòng)的動(dòng)畫(huà)效果;
3、GridView切屏拖動(dòng);
4、Activity不同生命周期對(duì)GridView數(shù)據(jù)的刷新及保存;
5、數(shù)據(jù)庫(kù)DBUtil的使用。
源碼運(yùn)行截圖
GridView單屏拖動(dòng)動(dòng)畫(huà)效果
GridView切屏?xí)r,拖動(dòng)的動(dòng)畫(huà)效果
GridView切屏后,對(duì)象交換
刪除GridView中某一對(duì)象
源碼片段
- //添加一個(gè)item
- public void addItemView(MoveItem item) {
- mAdapter.add(item);
- this.addView(getView(mAdapter.getCount() - 1));
- showEdit(isEditting);
- requestLayout();
- }
- @Override
- public void addView(View child, int index, LayoutParams params) {
- child.setClickable(true);
- if (child.getVisibility() != View.VISIBLE)
- child.setVisibility(View.VISIBLE);
- super.addView(child, index, params);
- int pages = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage);
- if (pages > totalPage) {
- if (this.onAddPage != null)
- onAddPage.onAddOrDeletePage(totalPage, true);
- totalPage = pages;
- }
- }
- //繪制Container所有item
- public void refreView() {
- removeAllViews();
- for (int i = 0; i < mAdapter.getCount(); i++) {
- this.addView(getView(i));
- }
- totalPage = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage);
- requestLayout();
- }
- @Override
- public void removeView(View view) {
- super.removeView(view);
- int pages = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage);
- if (pages < totalPage) {
- if (this.onAddPage != null)
- onAddPage.onAddOrDeletePage(totalPage, false);
- totalPage = pages;
- }
- }
- @Override
- public void removeViewAt(int index) {
- super.removeViewAt(index);
- int pages = (int) Math.ceil(getChildCount() * 1.0 / itemPerPage);
- if (pages < totalPage) {
- totalPage = pages;
- if (this.onAddPage != null)
- onAddPage.onAddOrDeletePage(totalPage, false);
- }
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- final int action = ev.getAction();
- final float x = ev.getX();
- final float y = ev.getY();
- int thresholdX = DensityUtil.dip2px(mContext, 8);
- switch (action) {
- case MotionEvent.ACTION_DOWN:
- startX = (int) x;
- if (mScroller.isFinished()) {
- if (!mScroller.isFinished()) {
- mScroller.abortAnimation();
- }
- temChangPosition = dragPosition = pointToPosition((int) x, (int) y);
- dragOffsetX = (int) (ev.getRawX() - x);
- dragOffsetY = (int) (ev.getRawY() - y);
- mLastMotionX = x;
- mLastMotionY = y;
- startX = (int) x;
- }
- break;
- case MotionEvent.ACTION_MOVE:
- int deltaX = (int) (mLastMotionX - x);
- if (IsCanMove(deltaX) && Math.abs(deltaX) > thresholdX && Mode != Mode_Drag) {
- mLastMotionX = x;
- scrollBy(deltaX, 0);
- Mode = Mode_Scroll;
- }
- if (Mode == Mode_Drag) {
- onDrag((int) x, (int) y);
- }
- break;
- case MotionEvent.ACTION_UP:
- float distance = ev.getRawX() - startX;
- if (distance > screenWidth / 6 && mCurScreen > 0
- && Mode != Mode_Drag) {
- snapToScreen(mCurScreen - 1);
- } else if (distance < -screenWidth / 6
- && mCurScreen < totalPage - 1 && Mode != Mode_Drag) {
- snapToScreen(mCurScreen + 1);
- } else if (Mode != Mode_Drag) {
- snapToDestination();
- }
- if (Mode == Mode_Drag) {
- stopDrag();
- }
- if (dragImageView != null) {
- animationMap.clear();
- showDropAnimation((int) x, (int) y);
- }
- startX = 0;
- break;
- case MotionEvent.ACTION_CANCEL:
- showEdit(false);
- }
- super.dispatchTouchEvent(ev);
- return true;
- }
- //開(kāi)始拖動(dòng)
- private void startDrag(Bitmap bm, int x, int y, View itemView) {
- dragPointX = x - itemView.getLeft() + mCurScreen * screenWidth;
- dragPointY = y - itemView.getTop();
- windowParams = new WindowManager.LayoutParams();
- windowParams.gravity = Gravity.TOP | Gravity.LEFT;
- windowParams.x = x - dragPointX + dragOffsetX;
- windowParams.y = y - dragPointY + dragOffsetY;
- windowParams.height = LayoutParams.WRAP_CONTENT;
- windowParams.width = LayoutParams.WRAP_CONTENT;
- windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
- | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
- | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
- | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
- windowParams.format = PixelFormat.TRANSLUCENT;
- windowParams.windowAnimations = 0;
- windowParams.alpha = 0.8f;
- ImageView iv = new ImageView(getContext());
- iv.setImageBitmap(bm);
- dragBitmap = bm;
- windowManager = (WindowManager) getContext().getSystemService(
- Context.WINDOW_SERVICE);
- windowManager.addView(iv, windowParams);
- dragImageView = iv;
- Mode = Mode_Drag;
- halfBitmapWidth = bm.getWidth() / 2;
- halfBitmapHeight = bm.getHeight() / 2;
- for (int i = 0; i < getChildCount(); i++) {
- getChildAt(i).getBackground().setAlpha((int) (0.8f * 255));
- }
- }
- //停止拖動(dòng)
- private void stopDrag() {
- recoverChildren();
- if (Mode == Mode_Drag) {
- if (getChildAt(dragPosition).getVisibility() != View.VISIBLE)
- getChildAt(dragPosition).setVisibility(View.VISIBLE);
- Mode = Mode_Free;
- Log.e("test", "scroll menu move");
- mContext.sendBroadcast(new Intent("com.stg.menu_move"));
- }
- }