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