현재 위치 - 중국오락넷 - 광고 연맹 - 안드로이드 데스크톱 스크롤 데스크톱 설정

안드로이드 데스크톱 스크롤 데스크톱 설정

1. 휴대폰 설정의' 액세스 가능성' 에서' 데스크톱 루프' 를 선택했습니다.

2. 기본 안드로이드 소스 코드에 이 기능을 추가합니다.

아이디어: 먼저 인터페이스를 만든 다음 시스템 테이블에서 선택한 값을 데이터베이스 (ADB 셸 entry) data/data/com.android.providers.settings/databases/에 저장합니다

그런 다음 Launch2 의 소스 코드에서 관련 코드를 실행하기 위해 데이터베이스에서 순환 데스크탑을 선택할지 여부를 가져옵니다.

먼저 UI 를 만듭니다.

소스 코드를 설정하는 accessibility_settings.xml 파일에 확인란을 추가합니다.

자바 코드

안드로이드: 키 = "launch _ repeat"

안드로이드: 제목 = "@ string/launch _ repeat _ title"

안드로이드: persistent = "false"/>

소스 코드를 설정하는 RES 에 관련 코드를 추가합니다.

Values/string.xml 의 Add (영어):

반복 발사

Values-ko-rcn/string.xml 에 추가 (중국어 표시):

"루프 데스크톱"

OnCreate 의 소스 코드 설정 AccessibilitySettings.java 에 다음을 추가합니다.

자바 코드

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

Mlaunchrepeat = (checkbox preference) findpreference (

발사 _ 반복);

Int LaunchRepeat = 설정. System.getint (this.getcontentresolver (),

"발사 _ 반복", 0); //체크아웃을 선택하셨습니까

If(LaunchRepeat== 1)// 선택하면 다음에 설정을 열 때 체크합니다.

Mlaunchrepeat.setchecked (true);

기타

Mlaunchrepeat.setchecked (false); //선택하지 않으면 다음에 설정을 열 때 확인하지 않습니다.

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

물론 정의해야 할 몇 가지 양이 있습니다.

개인 최종 문자열 LAUNCH_REPEAT =

"시작 _ 반복";

Private checkbox preference mlaunchrepeat;

OnPreferenceTreeClick 함수에 다음을 추가합니다.

자바 코드

//xxnan 에 의해 추가됨

If (launch _ repeat.equals (키))

{

설정. System.putint (getcontent resolver (),

"시작 _ 반복",

((CheckBoxPreference) 기본 설정). IsChecked ()?

1:0); //시스템의 시스템 테이블에 저장하도록 선택합니다.

}

//xxnan 에 의해 추가됨

완료되면 "데스크톱 루프" 를 클릭하여 data/data/com.android.providers.settings/databases 아래의 settings.db 데이터베이스 (sqlites

33 | launch _ repeat |1(select * from system; ) 을 참조하십시오.

이 시점에서 데이터는 시스템 테이블과 UI 에 저장되며, 다음 단계는 루치 2 소스 코드에서 이 값을 가져오는 것입니다 (루프 여부와 관계 없음).

Launcher2 소스 코드로 이동하여 Workspace.java 파일을 찾습니다.

OnTouchEvent 에서 이전 수정 기간은 다음과 같습니다.

자바 코드

사례 운동 사건. 조치 _ 조치:

If (mtouchstate = = touch _ state _ scrolling) {

최종 velocity tracker velocity tracker = mvelocity tracker;

Velocitytracker.computecurrentvelocity (1000, mmaximumpvelocity);

최종 int velocityX = (int)

Velocitytracker.getxvelocity (mactivepointerid);

Final int screen width = getwidth ();

Final intwhich screen = (MSC rollx+(screen width/2))/screen width;

Final float scrolled pos = (float) MSC rollx/screen width;

Log.i("velocityX ","velocity x = "+velocity x+"which screen = "+which screen);

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

//xxnan 에 의해 수정됨

If(velocity x>;; 스냅샷 속도) {

//힘껏 왼쪽으로 이동합니다.

//한 번에 여러 화면을 건너뛰지 마십시오.

Log.i("numscreen ","numscreen = "+mcurrentscreen);

/* final intbound = scrolled pos < 어느 화면입니까?

(((mcurrentscreen+getchildcount ())-1)% getchildcount ():

MCurrentScreen*/

Finalintbound = ((mcurrentscreen+getchildcount ())-1)% getchildcount ()

Log.i("numscreen ","bound = "+bound);

SnapToScreen( bound, velocityX, true);

} else if(velocity x<;; -스냅샷 속도) {

//힘을 주어 오른쪽으로 이동합니다

//한 번에 여러 화면을 건너뛰지 마십시오.

/* final intbound = scrolled pos > 어느 화면입니까?

(mcurrentscreen+1)% getchildcount (): mcurrentscreen; */

Finalintbound = (mcurrentscreen+1)% getchildcount ();

SnapToScreen(bound, velocityX, true);

} 그렇지 않으면 {

SnapToScreen(whichScreen, 0, true);

}

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

//여기 기본 코드가 있습니다.

/* if (velocity x > SNAP _ 속도 & amp& ampmCurrentScreen & gt0) {

//힘껏 왼쪽으로 이동합니다.

//한 번에 여러 화면을 건너뛰지 마십시오.

Final int bound = scrolledPos & lt 어떤 화면?

Mcurrentscreen-1:mcurrentscreen;

Snapto screen (math.min (which screen, bound), velocityX, true);

} else if(velocity x<;; -snap _ velocity & & ampmCurrentScreen & lt

GetChildCount()-1) {

//힘을 주어 오른쪽으로 이동합니다

//한 번에 여러 화면을 건너뛰지 마십시오.

Final int bound = scrolledPos & gt 어떤 화면?

Mcurrentscreen+1:mcurrentscreen;

Snapto screen (math.max (which screen, bound), velocityX, true);

} 그렇지 않으면 {

SnapToScreen(whichScreen, 0, true);

} */

}

MTouchState = TOUCH _ STATE _ REST 입니다

Mactive pointer id = invalid _ pointer;

Releasevelocitytracker ();

깨뜨리다

그런 다음 수정 된 장소에 판단을 추가하십시오. 시스템에서 얻은 값이 1 이면 순환할 수 있고 0 이면 안 됩니다.

코드를 다음과 같이 수정합니다.

자바 코드

사례 운동 사건. 조치 _ 조치:

If (mtouchstate = = touch _ state _ scrolling) {

최종 velocity tracker velocity tracker = mvelocity tracker;

Velocitytracker.computecurrentvelocity (1000, mmaximumpvelocity);

최종 int velocityX = (int)

Velocitytracker.getxvelocity (mactivepointerid);

Final int screen width = getwidth ();

Final intwhich screen = (MSC rollx+(screen width/2))/screen width;

Final float scrolled pos = (float) MSC rollx/screen width;

Log.i("velocityX ","velocity x = "+velocity x+"which screen = "+which screen);

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

//수정자: xxnan 20 13- 1-9

Launch _ repeat = 설정. System.getint (mcontext.getcontentresolver (),

"발사 _ 반복", 0); //시스템 테이블에서 "launch_repeat" 의 값을 가져옵니다.

Log.i(" launch_repeat ","launch _ repeat = "+launch _ repeat);

If(launch_repeat== 1)// 가 1 이면 순환됩니다. 즉, 이전에 수정되었습니다.

{

If(velocity x>;; 스냅샷 속도) {

//힘껏 왼쪽으로 이동합니다.

//한 번에 여러 화면을 건너뛰지 마십시오.

Log.i("numscreen ","numscreen = "+mcurrentscreen);

/* final intbound = scrolled pos < 어느 화면입니까?

(((mcurrentscreen+getchildcount ())-1)% getchildcount ():

MCurrentScreen*/

Finalintbound = ((mcurrentscreen+getchildcount ())-1)% getchildcount ()

Log.i("numscreen ","bound = "+bound);

SnapToScreen( bound, velocityX, true);

} else if(velocity x<;; -스냅샷 속도) {

//힘을 주어 오른쪽으로 이동합니다

//한 번에 여러 화면을 건너뛰지 마십시오.

/* final intbound = scrolled pos > 어느 화면입니까?

(mcurrentscreen+1)% getchildcount (): mcurrentscreen; */

Finalintbound = (mcurrentscreen+1)% getchildcount ();

SnapToScreen(bound, velocityX, true);

} 그렇지 않으면 {

SnapToScreen(whichScreen, 0, true);

}

}

Else// 0 이면 로컬 코드이며 반복되지 않습니다.

{

If(velocity x>;; SNAP _ 속도 & amp& ampmCurrentScreen & gt0) {

//힘껏 왼쪽으로 이동합니다.

//한 번에 여러 화면을 건너뛰지 마십시오.

Final int bound = scrolledPos & lt 어떤 화면?

Mcurrentscreen-1:mcurrentscreen;

Snapto screen (math.min (which screen, bound), velocityX, true);

} else if(velocity x<;; -snap _ velocity & & ampmCurrentScreen & lt

GetChildCount()-1) {

//힘을 주어 오른쪽으로 이동합니다

//한 번에 여러 화면을 건너뛰지 마십시오.

Final int bound = scrolledPos & gt 어떤 화면?

Mcurrentscreen+1:mcurrentscreen;

Snapto screen (math.max (which screen, bound), velocityX, true);

} 그렇지 않으면 {

SnapToScreen(whichScreen, 0, true);

}

}

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

//여기 기본 코드가 있습니다.

/* if (velocity x > SNAP _ 속도 & amp& ampmCurrentScreen & gt0) {

//힘껏 왼쪽으로 이동합니다.

//한 번에 여러 화면을 건너뛰지 마십시오.

Final int bound = scrolledPos & lt 어떤 화면?

Mcurrentscreen-1:mcurrentscreen;

Snapto screen (math.min (which screen, bound), velocityX, true);

} else if(velocity x<;; -snap _ velocity & & ampmCurrentScreen & lt

GetChildCount()-1) {

//힘을 주어 오른쪽으로 이동합니다

//한 번에 여러 화면을 건너뛰지 마십시오.

Final int bound = scrolledPos & gt 어떤 화면?

Mcurrentscreen+1:mcurrentscreen;

Snapto screen (math.max (which screen, bound), velocityX, true);

} 그렇지 않으면 {

SnapToScreen(whichScreen, 0, true);

} */

}

MTouchState = TOUCH _ STATE _ REST 입니다

Mactive pointer id = invalid _ pointer;

Releasevelocitytracker ();

깨뜨리다

물론 몇 개의 수량을 정의하려면 몇 개의 패키지를 가져와야 합니다.

패키지 가져오기:

//xxnan 에 의해 추가됨

Android.content.contentresolver 가져오기 //시스템 테이블에서 데이터 가져오기

Android.provider.setting 을 가져옵니다.

변수를 정의합니다.

Private int launch _ repeat// 루프 여부를 가져오는 값입니다.

여기서 수정한 다음 소스 코드에서 Launch2 의 소스 코드와 package/apps 설정을 컴파일하면 out/target/ 이 생성됩니다. 。 /시스템/응용 프로그램 아래

Launch2.apk 와 Settings.apk 는 휴대폰에 있는 system/app 의 두 apk 를 대체할 수 있습니다.

copyright 2024중국오락넷