androidgallery循環
① android怎麼viewpager實現循環切換圖片
Android中的ViewPager則實現了左右滑動的效果,ViewPager類提供了多界面切換的新效果。利用ViewPager實現圖片循環滾動代碼如下:
1、首先是布局文件,使用了一個ViewPager控制項:
java"><spanstyle="padding:0px;margin:0px;font-size:14px;"><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dip">
<TextView
android:id="@+id/tv_image_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="第一個引導頁面"
android:textColor="@android:color/white"
android:textSize="14sp"/>
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</RelativeLayout></span>
2、接下來實現一個繼承PagerAdapter的MyAdapter類,實現一個PagerAdapter,代碼如下:
<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.List;
importandroid.support.v4.view.PagerAdapter;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
{
privateList<ImageView>mImageViewList;
publicViewPagerAdapter(List<ImageView>imageViewList){
super();
this.mImageViewList=imageViewList;
}
/**
*該方法將返回所包含的Item總個數。為了實現一種循環滾動的效果,返回了基本整型的最大值,這樣就會創建很多的Item,
*其實這並非是真正的無限循環。
*/
@Override
publicintgetCount(){
returnInteger.MAX_VALUE;
}
/**
*判斷出去的view是否等於進來的view如果為true直接復用
*/
@Override
publicbooleanisViewFromObject(Viewarg0,Objectarg1){
returnarg0==arg1;
}
/**
*銷毀預載入以外的view對象,會把需要銷毀的對象的索引位置傳進來,就是position,
*因為mImageViewList只有五條數據,而position將會取到很大的值,
*所以使用取余數的方法來獲取每一條數據項。
*/
@Override
publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){
container.removeView(mImageViewList.get(position%mImageViewList.size()));
}
/**
*創建一個view,
*/
@Override
publicObjectinstantiateItem(ViewGroupcontainer,intposition){
container.addView(mImageViewList.get(position%mImageViewList.size()));
returnmImageViewList.get(position%mImageViewList.size());
}
}
</span>
3、最後是主界面部分的代碼:
<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.os.SystemClock;
importandroid.support.v4.view.ViewPager;
importandroid.support.v4.view.ViewPager.OnPageChangeListener;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
importandroid.widget.TextView;
{
privateList<ImageView>imageViewList;
privateTextViewtvDescription;
privateLinearLayoutllPoints;
privateString[]imageDescriptions;
=0;
privateViewPagermViewPager;
privatebooleanisLoop=true;
privateHandlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);
mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);
}
};
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setView();
initView();
}
publicvoidsetView(){
setContentView(R.layout.activity_splash_viewpager);
//自動切換頁面功能
newThread(newRunnable(){
@Override
publicvoidrun(){
while(isLoop){
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
}
}).start();
}
publicvoidinitView(){
mViewPager=(ViewPager)findViewById(R.id.viewpager);
tvDescription=(TextView)findViewById(R.id.tv_image_description);
llPoints=(LinearLayout)findViewById(R.id.ll_points);
prepareData();
ViewPagerAdapteradapter=newViewPagerAdapter(imageViewList);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(this);
tvDescription.setText(imageDescriptions[previousSelectPosition]);
llPoints.getChildAt(previousSelectPosition).setEnabled(true);
/**
*2147483647/2=1073741820-1
*設置ViewPager的當前項為一個比較大的數,以便一開始就可以左右循環滑動
*/
intn=Integer.MAX_VALUE/2%imageViewList.size();
intitemPosition=Integer.MAX_VALUE/2-n;
mViewPager.setCurrentItem(itemPosition);
}
privatevoidprepareData(){
imageViewList=newArrayList<ImageView>();
int[]imageResIDs=getImageResIDs();
imageDescriptions=getImageDescription();
ImageViewiv;
Viewview;
for(inti=0;i<imageResIDs.length;i++){
iv=newImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);
//添加點view對象
view=newView(this);
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
LayoutParamslp=newLayoutParams(5,5);
lp.leftMargin=10;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
}
}
privateint[]getImageResIDs(){
returnnewint[]{
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.pic_01,
R.drawable.pic_02
};
}
privateString[]getImageDescription(){
returnnewString[]{
"第一個引導頁面",
"第二個引導頁面",
"第三個引導頁面",
"第四個引導頁面",
"第五個引導頁面"
};
}
@Override
(intarg0){
}
@Override
publicvoidonPageScrolled(intarg0,floatarg1,intarg2){
}
@Override
publicvoidonPageSelected(intposition){
//改變圖片的描述信息
tvDescription.setText(imageDescriptions[position%imageViewList.size()]);
//切換選中的點,把前一個點置為normal狀態
llPoints.getChildAt(previousSelectPosition).setEnabled(false);
//把當前選中的position對應的點置為enabled狀態
llPoints.getChildAt(position%imageViewList.size()).setEnabled(true);
previousSelectPosition=position%imageViewList.size();
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
isLoop=false;
}
}
</span>
② Android TV中實現RecyView循環功能
RecycleView 用法 :
1. [endif]在Gradle中添加
implementation 'com.android.support:recyclerview-v7:26.0.2'
2. [endif]在主布局文件里添加RecycleView
3. [endif]創建item布局文件
在電視開發中,需要添加focusable 與 focusableintouchmode 才可以獲得焦點。
4. [endif]創建adapter繼承RecyclerView.Adapter
5. [endif] 在adapter中添加預設方法
1) [endif]On create ViewHolder()方法是將item布局載入到recycleView 的方法
View view = LayoutInflater. from (parent.getContext()).inflate(R.layout. item_2 , parent, false);
創建一個ViewHolder,並添加到ViewHolder裡面去,最後返回這個ViewHolder:
ViewHolder holder = new ViewHolder(view);return holder;
2) OnbindViewHolder()是將ViewHolder綁定到RecycleView上面時調用的方法
可在這里做更新View的操作。
3) [endif]GetItemCount 方法為返回數據長度的方法。一般返回值為:
return XXX.size();
4) [endif]在adapter中創建一個viewHolder,繼承
RecyclerView.ViewHolder
在這里創建item布局中的控制項對象,在public ViewHolder(View itemView)
方法中初始化:
tvItem2 = itemView.findViewById(R.id. tv_item_2 );
6. 在adapter 中創建一個數據對象用來接收想要傳入的數據,在結構體中接收傳入的數據例如:
private List mData;
在Activity中的操作
1. [endif]創建recycleView對象,創建layoutManager(布局管理器)對象,創建adapter對象,創建數據對象
2. 實例化recycleView對象,layoutManager對象,adapter對象
RecycleView有幾種布局管理器可用,可實現線性,網格,以及瀑布流的界面,以下為線性布局:
mlayoutManager = new LinearLayoutManager(this);
以下為網格布局:
//mlayoutManager = new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false);
3.為recycleview 設置布局管理器:
viewRecy2.setLayoutManager(mlayoutManager);
4.為recycleview設置adapter:
//3 設置數據適配器viewRecy2.setAdapter(myAdapter);
如果要在每一個item中添加事件,採取事件回調的方法,其他自定義View的回調皆類似,以下以添加點擊事件為例:
1) 在adapter中添加點擊事件的介面,並添加介面方法:
public interface onItemClickListener { void onItemClick(View view, int position);}
2) [endif]在adapter中創建介面實例
private onItemClickListener onItemClickListener;
3) 在adapter創建對應set方法體來接收Activity傳入的對象
public void setOnItemClickListener(onItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener;}
4)在onbindViewholde中判斷是否設置了監聽器
if (onItemClickListener !=null) {
//為ItemView設置監聽器
holder.tvItem2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position =holder.getLayoutPosition();
onItemClickListener.onItemClick(holder.tvItem2, position);
//onItemClickListener.onItemClick();
}
});
}
}
5) 最後在activity中通過adapter對象調用onset方法,實現點擊事件
myAdapter.setOnItemClickListener(new MyAdapter.onItemClickListener() {
@Override
public void onItemClick(View view, int position) {
lastPosition =currentPosition;
currentPosition = position;
// Toast.makeText(RecycleActivity_2.this, "click+" + position, Toast.LENGTH_SHORT).show();
myAdapter.notifyItemChanged(currentPosition);
myAdapter.notifyItemChanged(lastPosition);
}
});
Android TV中RecycleView的Item循環實現
(1) 在TV中遙控器的按鍵取代了手機的滑動,因此我們要監聽遙控器的按鍵,因此在adapter中的item監聽setonkeylistener方法。
並獲取item所在位置的position,存到tag裡面
holder.tvItem2.setTag(position);
當在第一個Item中按向上鍵時,position<0,此時我們調用移動到最後一個,同理,當在最後一個時,移動到第一個。
smoothScrollToPosition(getItemCount() - 1)
holder.tvItem2.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
int action = event.getAction();
// Log.e("---", keyCode + "");
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
int positionUp = (int) v.getTag();
if (action == KeyEvent.ACTION_DOWN) {
if (positionUp <=0) {
recyclerView.smoothScrollToPosition(getItemCount() -1);
return true;
}
}
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
int positionDown = (int) v.getTag();
if (action == KeyEvent.ACTION_DOWN) {
if (positionDown >= getItemCount() -1) {
recyclerView.smoothScrollToPosition(0);
return true;
}
}
break;
}
return false;
}
});
(2) 然後在activity中封裝了一個回滾方法來判斷按鍵是否到達底部,並重新獲取焦點
public void scroolChange(RecyclerView recyclerView, boolean toFirst, boolean toLast) {
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int lastVisibleItem = manager.();
int firstVisibleItem = manager.();
int totalItemCount = manager.getItemCount();
//向下滾動,到底部
if (lastVisibleItem == (totalItemCount -1) && toLast) {
View view = recyclerView.getChildAt(lastVisibleItem);
LinearLayoutManager llM = (LinearLayoutManager) recyclerView.getLayoutManager();
if (view !=null) {
view.requestFocus();
}else if (llM.findViewByPosition(lastVisibleItem) !=null) {
llM.findViewByPosition(lastVisibleItem).requestFocus();
}else {
recyclerView.requestFocus();
}
}
//向上滾動,到頂部
if (firstVisibleItem ==0 && toFirst) {
View view = recyclerView.getChildAt(firstVisibleItem);
LinearLayoutManager llM = (LinearLayoutManager) recyclerView.getLayoutManager();
if (view !=null) {
view.requestFocus();
}else if (llM.findViewByPosition(firstVisibleItem) !=null) {
llM.findViewByPosition(firstVisibleItem).requestFocus();
}else {
recyclerView.requestFocus();
}
}
}
(3) 最後在recycleView 調用addscrolllistener方法,來監聽recycleView的滾動狀態
由於setonScrollListener有時回產生空指針,因此建議使用add方法
viewRecy2.addOnScrollListener(new RecyclerView.OnScrollListener() {
boolean toLast =false;
boolean toFirst =false;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == recyclerView.SCROLL_STATE_IDLE) {
// Log.e("---", "底部");
scroolChange(recyclerView, toFirst, toLast);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy >0) {
toLast =true;
}else {
toFirst =true;
}
}
});
Add中包含兩個方法,都可以來判斷是否到達頂部或底部。至此,實現了Android TV中RecycleView的循環功能。
③ android開發圖片(ImageView)要實現循環勻速滾動,速度可調,怎麼實現呢,用什麼組件好呢
採用畫廊視圖,GalleryView,自動勻速定時切換的話可以使用Timetask。網上搜一搜,很多案例。望採納。
④ 在android系統 里的 gallery什麼意思啊
android系統里的「gallery」指的是圖庫相冊。
gallery 表示:n. 畫廊;走廊;旁聽席;地道;vt. 在?修建走廊;在?挖地道;vi. 挖地道
相關短語
1、art gallery美術館;畫廊
2、photo gallery圖片庫
3、picture gallery畫館;美術館
(4)androidgallery循環擴展閱讀:
近義詞:n. 畫廊;走廊;旁聽席;地道 hall、passage、corridor、underground、subway
gallery 來自拉丁語Galilaea, 現巴勒斯坦地名Galilee,原指位於Galilee的教堂門廊,走廊。
雙語例句
1、Beforewego tothegallery.
在我們去畫廊之前。
2、Isthisyourgallery?
這是你的畫廊嗎?
3、Sowhat diddadhave todo at thegallery.
那麼其實爸爸要去畫廊做什麼?
⑤ Android RecyclerView實現循環列表-點擊事件
源碼鏈接
效果圖
實現步驟:
1.在build.gradle文件中加入recyclerView庫
2.在main.xml中使用recyclerView布局
3.滾動列表中的每一項對應一個對象,他們屬於同一類的實例。接著定義實體類,我做的是歌單列表,定義序號,名字和時長
4.設計列表項的樣式
4.使用適配器為列表項設置顯示的數據
4.1定義適配器的內部類與列表項綁定
4.2適配器繼承自recyclerView.Adapter,要重寫三個方法,創建列表項視圖,復用載入,獲取列表項數量,到這一步,循環列表已經可以實現滾動效果了。
5.為列表項添加點擊監聽事件,使用介面回調
5.1仍然是在適配器中,定義介面
5.2在onBindViewHolder中為列表項設置監聽
5.3在MainActivity中使用,實現onclick方法
⑥ 安卓系統桌面循環滾動桌面設置的
1、手機設置」的「輔助功能」中有選擇是否「桌面循環」。
2、在原生的android源碼上添加這一功能。
思路:先把界面做出來,再將是否選擇的值存到系統的(adb shell進入)data/data/com.android.providers.settings/databases/settings.db資料庫中的system表中,
然後在Launch2的源碼中取得資料庫中是否選擇循環桌面來執行相關代碼。
先做UI:
在settings源碼中的accessibility_settings.xml文件中添加一個checkbox:
java代碼
android:key="launch_repeat"
android:title="@string/launch_repeat_title"
android:persistent="false"/>
在settings源碼的res中添加相關的代碼:
在values/string.xml中添加(英文顯示):
Launch Repeat
在values-zh-rCN/string.xml中添加(中文顯示):
"循環桌面"
在settings源碼的AccessibilitySettings.java中的OnCreate中添加:
java代碼
/*****************************************/
mLaunchRepeat=(CheckBoxPreference) findPreference(
LAUNCH_REPEAT);
int LaunchRepeat=Settings.System.getInt(this.getContentResolver(),
"launch_repeat",0);//取出是否被選擇
if(LaunchRepeat==1)//如果被選擇,那麼下次打開setting時就勾選
mLaunchRepeat.setChecked(true);
else
mLaunchRepeat.setChecked(false);//如果沒被選擇,那麼下次打開setting時就不勾選
/*****************************************/
當然還要定義幾個量:
private final String LAUNCH_REPEAT =
"launch_repeat";
private CheckBoxPreference mLaunchRepeat;
在onPreferenceTreeClick函數中添加:
java代碼
//add by xxnan
if(LAUNCH_REPEAT.equals(key))
{
Settings.System.putInt(getContentResolver(),
"launch_repeat",
((CheckBoxPreference) preference).isChecked()?
1:0);//將是否選擇存到系統的system表中
}
//add by xxnan
如果做好了之後當點擊選擇「桌面循環時」可以到(adb shell進入)data/data/com.android.providers.settings/databases下的settings.db資料庫(sqlite3 settings.db)的system
表中看到33|launch_repeat|1(select * from system;)。
到這里就完成了將數據存到系統system表中以及UI,接下來就是在Launch2源碼中去取這個值(是否循環)。
到Launcher2源碼中去找到Workspace.java文件,在裡面有相應的修改:
在onTouchEvent中,之前有修改循環,如下:
java代碼
case MotionEvent.ACTION_UP:
if (mTouchState == TOUCH_STATE_SCROLLING) {
final VelocityTracker velocityTracker = mVelocityTracker;
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
final int velocityX = (int)
velocityTracker.getXVelocity(mActivePointerId);
final int screenWidth = getWidth();
final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth;
final float scrolledPos = (float) mScrollX / screenWidth;
Log.i("velocityX","velocityX="+velocityX+"whichScreen="+whichScreen);
/***********************************************/
//modifided by xxnan
if (velocityX > SNAP_VELOCITY) {
// Fling hard enough to move left.
// Don't fling across more than one screen at a time.
Log.i("numscreen","numscreen="+mCurrentScreen);
/* final int bound = scrolledPos < whichScreen ?
( (mCurrentScreen+ getChildCount()) - 1 )% getChildCount():
mCurrentScreen;*/
final int bound =( (mCurrentScreen+ getChildCount()) - 1 )% getChildCount()
;
Log.i("numscreen","bound="+bound);
snapToScreen( bound, velocityX, true);
} else if (velocityX < -SNAP_VELOCITY ) {
// Fling hard enough to move right
// Don't fling across more than one screen at a time.
/*final int bound = scrolledPos > whichScreen ?
( mCurrentScreen + 1 )% getChildCount(): mCurrentScreen;*/
final int bound = ( mCurrentScreen + 1 )% getChildCount() ;
snapToScreen(bound, velocityX, true);
} else {
snapToScreen(whichScreen, 0, true);
}
/***********************************************/
//下面是原生代碼
/*if (velocityX > SNAP_VELOCITY && mCurrentScreen > 0) {
// Fling hard enough to move left.
// Don't fling across more than one screen at a time.
final int bound = scrolledPos < whichScreen ?
mCurrentScreen - 1 : mCurrentScreen;
snapToScreen(Math.min(whichScreen, bound), velocityX, true);
} else if (velocityX < -SNAP_VELOCITY && mCurrentScreen <
getChildCount() - 1) {
// Fling hard enough to move right
// Don't fling across more than one screen at a time.
final int bound = scrolledPos > whichScreen ?
mCurrentScreen + 1 : mCurrentScreen;
snapToScreen(Math.max(whichScreen, bound), velocityX, true);
} else {
snapToScreen(whichScreen, 0, true);
}*/
}
mTouchState = TOUCH_STATE_REST;
mActivePointerId = INVALID_POINTER;
releaseVelocityTracker();
break;
那麼就要在修改的地方加一個判斷,如果system中取得的值是1,就可以循環,如果是0,就不能。
代碼修改如下:
java代碼
case MotionEvent.ACTION_UP:
if (mTouchState == TOUCH_STATE_SCROLLING) {
final VelocityTracker velocityTracker = mVelocityTracker;
velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
final int velocityX = (int)
velocityTracker.getXVelocity(mActivePointerId);
final int screenWidth = getWidth();
final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth;
final float scrolledPos = (float) mScrollX / screenWidth;
Log.i("velocityX","velocityX="+velocityX+"whichScreen="+whichScreen);
/***********************************************/
//modifided by xxnan 2013-1-9
launch_repeat=Settings.System.getInt(mContext.getContentResolver(),
"launch_repeat",0);//取出system表中「launch_repeat」的值
Log.i(" launch_repeat"," launch_repeat="+ launch_repeat);
if(launch_repeat==1)//如果是1,就循環,也就是之前已經改好的
{
if (velocityX > SNAP_VELOCITY) {
// Fling hard enough to move left.
// Don't fling across more than one screen at a time.
Log.i("numscreen","numscreen="+mCurrentScreen);
/* final int bound = scrolledPos < whichScreen ?
( (mCurrentScreen+ getChildCount()) - 1 )% getChildCount():
mCurrentScreen;*/
final int bound =( (mCurrentScreen+ getChildCount()) - 1 )% getChildCount()
;
Log.i("numscreen","bound="+bound);
snapToScreen( bound, velocityX, true);
} else if (velocityX < -SNAP_VELOCITY ) {
// Fling hard enough to move right
// Don't fling across more than one screen at a time.
/*final int bound = scrolledPos > whichScreen ?
( mCurrentScreen + 1 )% getChildCount(): mCurrentScreen;*/
final int bound = ( mCurrentScreen + 1 )% getChildCount() ;
snapToScreen(bound, velocityX, true);
} else {
snapToScreen(whichScreen, 0, true);
}
}
else//如果是0,那麼就是原生代碼,不循環
{
if (velocityX > SNAP_VELOCITY && mCurrentScreen > 0) {
// Fling hard enough to move left.
// Don't fling across more than one screen at a time.
final int bound = scrolledPos < whichScreen ?
mCurrentScreen - 1 : mCurrentScreen;
snapToScreen(Math.min(whichScreen, bound), velocityX, true);
} else if (velocityX < -SNAP_VELOCITY && mCurrentScreen <
getChildCount() - 1) {
// Fling hard enough to move right
// Don't fling across more than one screen at a time.
final int bound = scrolledPos > whichScreen ?
mCurrentScreen + 1 : mCurrentScreen;
snapToScreen(Math.max(whichScreen, bound), velocityX, true);
} else {
snapToScreen(whichScreen, 0, true);
}
}
/***********************************************/
//下面是原生代碼
/*if (velocityX > SNAP_VELOCITY && mCurrentScreen > 0) {
// Fling hard enough to move left.
// Don't fling across more than one screen at a time.
final int bound = scrolledPos < whichScreen ?
mCurrentScreen - 1 : mCurrentScreen;
snapToScreen(Math.min(whichScreen, bound), velocityX, true);
} else if (velocityX < -SNAP_VELOCITY && mCurrentScreen <
getChildCount() - 1) {
// Fling hard enough to move right
// Don't fling across more than one screen at a time.
final int bound = scrolledPos > whichScreen ?
mCurrentScreen + 1 : mCurrentScreen;
snapToScreen(Math.max(whichScreen, bound), velocityX, true);
} else {
snapToScreen(whichScreen, 0, true);
}*/
}
mTouchState = TOUCH_STATE_REST;
mActivePointerId = INVALID_POINTER;
releaseVelocityTracker();
break;
當然這裡面也要定義幾個量,以及導入幾個包:
導入包:
//add by xxnan
import android.content.ContentResolver;//從system表中取數據
import android.provider.Settings;
定義變數:
private int launch_repeat;//取得是否循環的值
到這里就全部修改好了,還有就是編譯一下源碼中的package/apps的Launch2和Settings的源碼,將生成的out/target/。。。/system/app下的
Launch2.apk和Settings.apk替換手機里system/app的這兩個apk就可以了。