Launcherソースコードの高速起動の変更


最近、高速ダイヤルアップのアプリを書いていますが、アプリケーションは簡単です.主に高速の特徴を際立たせなければなりません.起動は速く、ホームスクリーンから起動したほうがいいです.もちろん、最初の反応はデスクトップにショートカットを新規作成することですが、私はもう一つの特別な方法を使うことにしました.つまり、ユーザーがホームスクリーンで画面を上下にタッチしたとき、このアプリケーションを起動して、左右のタッチスクリーンはデスクトップを切り替えます.くだらないことは言わないで、どのように実現するかを見てください.
1、コンパイル運転Launcherソースコード、具体的にはネット上の関連紹介を参照することができ、もともと修正したソースコードを添付するつもりだったが、ファイルが大きすぎて、必要なら私を探して、ネット資料を参考に自分でコンパイルすることを提案する.
2、Launcherのソースコードを修正して、一箇所だけ変更して、WorkspaceクラスのonInterceptTouchEvent方法を修正する
 
public boolean onInterceptTouchEvent(MotionEvent ev) {

        /*****************      ***********/

        final float x = ev.getX();
        final float y = ev.getY();
        Log.d("Workspace", "enter onInterceptTouchEvent");
        switch (action) {
            case MotionEvent.ACTION_MOVE:
                /*
                 * mIsBeingDragged == false, otherwise the shortcut would have caught it.
                 * Check
                 * whether the user has moved far enough from his original down touch.
                 */

                /*
                 * Locally do absolute value. mLastMotionX is set to the y value
                 * of the down event.
                 */
                final int xDiff = (int) Math.abs(x - mLastMotionX);
                final int yDiff = (int) Math.abs(y - mLastMotionY);

                final int touchSlop = mTouchSlop;
                boolean xMoved = xDiff > touchSlop;
                boolean yMoved = yDiff > touchSlop;
                
                if (xMoved || yMoved) {
                    
                    if (xMoved) {
                        // Scroll if the user moved far enough along the X axis
                        mTouchState = TOUCH_STATE_SCROLLING;
                        enableChildrenCache();
                    }
   /*********************************     ****************************************/
                    if(yMoved) {            //    
                    	Log.d("workspace", "          !");
                        
                    	Intent intent = new Intent();                    
                        //       ,  
                    	intent.setClassName("com.tek.qd", "com.tek.qd.QuickDialer");
                        //    
                    	mContext.startActivity(intent);

                    	mTouchState = TOUCH_STATE_SCROLLING;
                    	enableChildrenCache();
                    }
  /*********************************    ****************************************/
                    // Either way, cancel any pending longpress
                    if (mAllowLongPress) {
                        mAllowLongPress = false;
                        // Try canceling the long press. It could also have been scheduled
                        // by a distant descendant, so use the mAllowLongPress flag to 
                        //block
                        // everything
                        final View currentScreen = getChildAt(mCurrentScreen);
                        currentScreen.cancelLongPress();
                    }
                }
                break;

            case MotionEvent.ACTION_DOWN:
                // Remember location of down touch
                mLastMotionX = x;
                mLastMotionY = y;
                mAllowLongPress = true;
                
                /*
                 * If being flinged and user touches the screen, initiate drag;
                 * otherwise don't.  mScroller.isFinished should be false when
                 * being flinged.
                 */
                
                mTouchState = mScroller.isFinished() ? 
                               TOUCH_STATE_REST : TOUCH_STATE_SCROLLING;
                break;

            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:

                if (mTouchState != TOUCH_STATE_SCROLLING) {
                    final CellLayout currentScreen = (CellLayout) getChildAt(
                                                      mCurrentScreen);
                    if (!currentScreen.lastDownOnOccupiedCell()) {
                        getLocationOnScreen(mTempCell);
                        // Send a tap to the wallpaper if the last down was on 
                        //empty space
                        mWallpaperManager.sendWallpaperCommand(getWindowToken(), 
                                "android.wallpaper.tap",
                                mTempCell[0] + (int) ev.getX(),
                                mTempCell[1] + (int) ev.getY(), 0, null);
                    }
                }
                
                // Release the drag
                clearChildrenCache();
                mTouchState = TOUCH_STATE_REST;
                mAllowLongPress = false;
                break;
        }

        /*
         * The only time we want to intercept motion events is if we are in the
         * drag mode.
         */
        return mTouchState != TOUCH_STATE_REST;
    }
 
Workspaceはデスクトップに相当し、タッチスクリーンイベントはonTouchEventに達する前にonInterceptTouchEventメソッドを実行します.
デスクトップの空白でタッチスクリーンイベントを使用してアプリケーションを起動したい場合は、この方法を使用できますが、ユーザーは必ずしもカスタマイズLauncherを受け入れるとは限りません.