Android攻城狮ScrollView
生活随笔
收集整理的這篇文章主要介紹了
Android攻城狮ScrollView
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ScrollView 滾動(dòng)視圖
滾動(dòng)視圖是指當(dāng)前擁有很多內(nèi)容,屏幕顯示不完整時(shí),需要通過滾動(dòng)來顯示完整的視圖。
-----------------------------
ScrollBar分兩種:
HorizontalScrollView: 水平滾動(dòng)視圖
ScrollView: 垂直滾動(dòng)視圖
-----------------------------
隱藏滾動(dòng)條有兩種方式:
一種是在標(biāo)簽中設(shè)置: android:scrollbars="none"
另一種是在代碼中設(shè)置:
setHorizontalScrollBarEnable(false); 隱藏橫向ScrollView
setVerticalScrollBarEnable(false); 隱藏縱向ScrollView
switch (event.getAction()){case MotionEvent.ACTION_MOVE:/*** 1.getScrollY()----滾動(dòng)條滑動(dòng)的距離* 2.getMeasuredHeight()* 3.getHeight()*///頂部狀態(tài)if(scrollView.getScrollY()<=0){Log.i("Main","頂部");}//底部狀態(tài)//scrollView.getChild(0) 表示 scrollView的第一個(gè)子View,這里就是TextView。//TextView的總高度=屏幕的高度+滾動(dòng)條的最大滑動(dòng)距離//這里的條件是TextView的總高度<=屏幕的高度+滾動(dòng)條的滑動(dòng)距離,一旦達(dá)成條件,就說明滾動(dòng)條已經(jīng)達(dá)到最大距離,也就是到底了。if(scrollView.getChildAt(0).getMeasuredHeight()<=scrollView.getHeight()+scrollView.getScrollY()){Log.i("Main","滑動(dòng)到底部");Log.i("Main","scrollView.getChildAt(0).getMeasuredHeight()="+scrollView.getChildAt(0).getMeasuredHeight()+" scrollView.getHeight()="+scrollView.getHeight()+ "scrollView.getScrollY()="+scrollView.getScrollY());textView.append(getResources().getString(R.string.content2));}break;
ScrollView的監(jiān)聽器——setOnTouchLiatener的使用 應(yīng)用案例:判斷 ScrollView 何時(shí)滑動(dòng)到底部 類似于 ListView的下拉更新,但這里使用的是 TextView+ScrollView。 監(jiān)聽事件中含有 onTouch()方法,和上一章的 Flipper的 onTouchEvent類似。 ----------------------------------- getScrollY()----滾動(dòng)條滑動(dòng)的距離 getMeasuredHeight() 視圖的真實(shí)高度(隱藏部分+顯示部分) getHeight() 視圖顯示部分的高度 -------------------------------------- 摘自評(píng)論區(qū): <ScrollView>里邊只能有一個(gè)元素,如果使用多個(gè)元素,需要把元素都放在<LinearLayout>等布局標(biāo)簽中,然后把布局標(biāo)簽在放在<ScrollView>否則放多個(gè)元素會(huì)報(bào)錯(cuò)。 -------------------------------------- 摘自評(píng)論區(qū): 那個(gè)滾動(dòng)到底部或頂部的判斷,放在MotionEvent.ACTION_MOVE不合適,那里會(huì)執(zhí)行很多次操作;放在MotionEvent.ACTION_UP比較適合,手指松開再去執(zhí)行。
scrollTo 和 scrollBy區(qū)別 scrollTo: 相對(duì)于滾動(dòng)視圖的起始位置,去滾動(dòng)相應(yīng)的距離,所以只能滑動(dòng)一次。 scrollBy: 相對(duì)于當(dāng)前位置,去滾動(dòng)相應(yīng)的距離,每滾動(dòng)一次就會(huì)更新當(dāng)前位置,所以能不斷滾動(dòng)。 scrollBy的源碼: public void scrollBy(int x,int y){scrollTo(mScrollX + x , mScrollY + y); } 其中,mScrollX 和 mScrollY 表示當(dāng)前坐標(biāo)。 ---------------------------------- 應(yīng)用案例:控制ScrollView視圖的位置 實(shí)際案例:小說閱讀,想要回到上次看的地方,如果采取手勢(shì)滑動(dòng),要不停地滑,會(huì)比較麻煩,而現(xiàn)在采取按鈕的方式代替手勢(shì)滑動(dòng),可以直接定位到你上次瀏覽的地方,實(shí)現(xiàn)方法是記錄上一次退出的位置,下次瀏覽時(shí)使用 scrollTo 或者 scrollBy 去恢復(fù)到上次瀏覽到的位置。 ------------------------------------- 通過按鈕滑動(dòng)視圖的步驟 1. 在 main.xml 中添加兩個(gè) Button,分別表示向上和向下(這里是垂直的ScrollView)。 2. 在 MainActivity中初始化這兩個(gè)Button。令 MainActivity 實(shí)現(xiàn)接口 OnClickListener。 3. 對(duì)兩個(gè)按鈕設(shè)置監(jiān)聽器。 4. 重寫 onClick(): (1)使用switch,通過view.getId()判斷是哪個(gè)按鈕點(diǎn)擊。 (2)使用 scrollTo(int x,int y) 或者 scrollBy(int x,int y)實(shí)現(xiàn)滑動(dòng)。 1 // ScrollView嵌套TextView,實(shí)現(xiàn)滾動(dòng)條 滾動(dòng)效果 2 //實(shí)現(xiàn)監(jiān)聽,對(duì)頂部和底部的判斷 3 //控制滾動(dòng)條滾動(dòng)的位置,向上滾動(dòng)或者向下滾動(dòng)指定距離 4 public class MainActivity extends Activity implements OnClickListener { 5 private TextView textView; 6 private ScrollView scrollView; 7 private Button up, down; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.main); 13 up = (Button) findViewById(R.id.up); 14 down = (Button) findViewById(R.id.down); 15 up.setOnClickListener(this); 16 down.setOnClickListener(this); 17 textView = (TextView) findViewById(R.id.content); 18 textView.setText(getResources().getString(R.string.content)); 19 scrollView = (ScrollView) findViewById(R.id.scrollview1); 20 //實(shí)現(xiàn)監(jiān)聽 21 scrollView.setOnTouchListener(new OnTouchListener() { 22 23 @Override 24 public boolean onTouch(View v, MotionEvent event) { 25 // TODO Auto-generated method stub 26 switch (event.getAction()) { 27 case MotionEvent.ACTION_UP: {break;} 28 case MotionEvent.ACTION_DOWN: {break;} 29 case MotionEvent.ACTION_MOVE: { 30 // 1.getScrollY()滾動(dòng)條滑動(dòng)的距離 31 // 2.getMeasureHeight() 總的長(zhǎng)度 32 // 3.getHeight()一屏的內(nèi)容高度 33 34 // 頂部狀態(tài) 35 if (scrollView.getScrollY() <= 0) { 36 Log.i("main", "滑動(dòng)到頂部"); 37 } 38 // 底部狀態(tài) 39 // textview的總高度《=屏幕高度+滾動(dòng)條的滾動(dòng)距離 40 if (scrollView.getChildAt(0).getMeasuredHeight() <= scrollView 41 .getHeight() + scrollView.getScrollY()) { 42 Log.i("main", "滑動(dòng)到底部咯"); 43 //繼續(xù)添加數(shù)據(jù) 44 textView.append(getResources().getString( 45 R.string.content)); 46 } 47 break; 48 } 49 50 } 51 return false; 52 } 53 }); 54 55 } 56 //控制滾動(dòng)條滾動(dòng)的位置 57 @Override 58 public void onClick(View v) { 59 // TODO Auto-generated method stub 60 switch (v.getId()) { 61 // scrollView.scrollTo 以滾動(dòng)視圖起始位置計(jì)算 62 // scrollView.scrollBy 相對(duì)前一次位置滾動(dòng)對(duì)應(yīng)的距離 63 case R.id.up: { 64 scrollView.scrollTo(0, -30); 65 break; 66 } 67 case R.id.down: { 68 scrollView.scrollBy(0, 30); 69 break; 70 } 71 } 72 } 73 74 }
switch (event.getAction()){case MotionEvent.ACTION_MOVE:/*** 1.getScrollY()----滾動(dòng)條滑動(dòng)的距離* 2.getMeasuredHeight()* 3.getHeight()*///頂部狀態(tài)if(scrollView.getScrollY()<=0){Log.i("Main","頂部");}//底部狀態(tài)//scrollView.getChild(0) 表示 scrollView的第一個(gè)子View,這里就是TextView。//TextView的總高度=屏幕的高度+滾動(dòng)條的最大滑動(dòng)距離//這里的條件是TextView的總高度<=屏幕的高度+滾動(dòng)條的滑動(dòng)距離,一旦達(dá)成條件,就說明滾動(dòng)條已經(jīng)達(dá)到最大距離,也就是到底了。if(scrollView.getChildAt(0).getMeasuredHeight()<=scrollView.getHeight()+scrollView.getScrollY()){Log.i("Main","滑動(dòng)到底部");Log.i("Main","scrollView.getChildAt(0).getMeasuredHeight()="+scrollView.getChildAt(0).getMeasuredHeight()+" scrollView.getHeight()="+scrollView.getHeight()+ "scrollView.getScrollY()="+scrollView.getScrollY());textView.append(getResources().getString(R.string.content2));}break;
ScrollView的監(jiān)聽器——setOnTouchLiatener的使用 應(yīng)用案例:判斷 ScrollView 何時(shí)滑動(dòng)到底部 類似于 ListView的下拉更新,但這里使用的是 TextView+ScrollView。 監(jiān)聽事件中含有 onTouch()方法,和上一章的 Flipper的 onTouchEvent類似。 ----------------------------------- getScrollY()----滾動(dòng)條滑動(dòng)的距離 getMeasuredHeight() 視圖的真實(shí)高度(隱藏部分+顯示部分) getHeight() 視圖顯示部分的高度 -------------------------------------- 摘自評(píng)論區(qū): <ScrollView>里邊只能有一個(gè)元素,如果使用多個(gè)元素,需要把元素都放在<LinearLayout>等布局標(biāo)簽中,然后把布局標(biāo)簽在放在<ScrollView>否則放多個(gè)元素會(huì)報(bào)錯(cuò)。 -------------------------------------- 摘自評(píng)論區(qū): 那個(gè)滾動(dòng)到底部或頂部的判斷,放在MotionEvent.ACTION_MOVE不合適,那里會(huì)執(zhí)行很多次操作;放在MotionEvent.ACTION_UP比較適合,手指松開再去執(zhí)行。
scrollTo 和 scrollBy區(qū)別 scrollTo: 相對(duì)于滾動(dòng)視圖的起始位置,去滾動(dòng)相應(yīng)的距離,所以只能滑動(dòng)一次。 scrollBy: 相對(duì)于當(dāng)前位置,去滾動(dòng)相應(yīng)的距離,每滾動(dòng)一次就會(huì)更新當(dāng)前位置,所以能不斷滾動(dòng)。 scrollBy的源碼: public void scrollBy(int x,int y){scrollTo(mScrollX + x , mScrollY + y); } 其中,mScrollX 和 mScrollY 表示當(dāng)前坐標(biāo)。 ---------------------------------- 應(yīng)用案例:控制ScrollView視圖的位置 實(shí)際案例:小說閱讀,想要回到上次看的地方,如果采取手勢(shì)滑動(dòng),要不停地滑,會(huì)比較麻煩,而現(xiàn)在采取按鈕的方式代替手勢(shì)滑動(dòng),可以直接定位到你上次瀏覽的地方,實(shí)現(xiàn)方法是記錄上一次退出的位置,下次瀏覽時(shí)使用 scrollTo 或者 scrollBy 去恢復(fù)到上次瀏覽到的位置。 ------------------------------------- 通過按鈕滑動(dòng)視圖的步驟 1. 在 main.xml 中添加兩個(gè) Button,分別表示向上和向下(這里是垂直的ScrollView)。 2. 在 MainActivity中初始化這兩個(gè)Button。令 MainActivity 實(shí)現(xiàn)接口 OnClickListener。 3. 對(duì)兩個(gè)按鈕設(shè)置監(jiān)聽器。 4. 重寫 onClick(): (1)使用switch,通過view.getId()判斷是哪個(gè)按鈕點(diǎn)擊。 (2)使用 scrollTo(int x,int y) 或者 scrollBy(int x,int y)實(shí)現(xiàn)滑動(dòng)。 1 // ScrollView嵌套TextView,實(shí)現(xiàn)滾動(dòng)條 滾動(dòng)效果 2 //實(shí)現(xiàn)監(jiān)聽,對(duì)頂部和底部的判斷 3 //控制滾動(dòng)條滾動(dòng)的位置,向上滾動(dòng)或者向下滾動(dòng)指定距離 4 public class MainActivity extends Activity implements OnClickListener { 5 private TextView textView; 6 private ScrollView scrollView; 7 private Button up, down; 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.main); 13 up = (Button) findViewById(R.id.up); 14 down = (Button) findViewById(R.id.down); 15 up.setOnClickListener(this); 16 down.setOnClickListener(this); 17 textView = (TextView) findViewById(R.id.content); 18 textView.setText(getResources().getString(R.string.content)); 19 scrollView = (ScrollView) findViewById(R.id.scrollview1); 20 //實(shí)現(xiàn)監(jiān)聽 21 scrollView.setOnTouchListener(new OnTouchListener() { 22 23 @Override 24 public boolean onTouch(View v, MotionEvent event) { 25 // TODO Auto-generated method stub 26 switch (event.getAction()) { 27 case MotionEvent.ACTION_UP: {break;} 28 case MotionEvent.ACTION_DOWN: {break;} 29 case MotionEvent.ACTION_MOVE: { 30 // 1.getScrollY()滾動(dòng)條滑動(dòng)的距離 31 // 2.getMeasureHeight() 總的長(zhǎng)度 32 // 3.getHeight()一屏的內(nèi)容高度 33 34 // 頂部狀態(tài) 35 if (scrollView.getScrollY() <= 0) { 36 Log.i("main", "滑動(dòng)到頂部"); 37 } 38 // 底部狀態(tài) 39 // textview的總高度《=屏幕高度+滾動(dòng)條的滾動(dòng)距離 40 if (scrollView.getChildAt(0).getMeasuredHeight() <= scrollView 41 .getHeight() + scrollView.getScrollY()) { 42 Log.i("main", "滑動(dòng)到底部咯"); 43 //繼續(xù)添加數(shù)據(jù) 44 textView.append(getResources().getString( 45 R.string.content)); 46 } 47 break; 48 } 49 50 } 51 return false; 52 } 53 }); 54 55 } 56 //控制滾動(dòng)條滾動(dòng)的位置 57 @Override 58 public void onClick(View v) { 59 // TODO Auto-generated method stub 60 switch (v.getId()) { 61 // scrollView.scrollTo 以滾動(dòng)視圖起始位置計(jì)算 62 // scrollView.scrollBy 相對(duì)前一次位置滾動(dòng)對(duì)應(yīng)的距離 63 case R.id.up: { 64 scrollView.scrollTo(0, -30); 65 break; 66 } 67 case R.id.down: { 68 scrollView.scrollBy(0, 30); 69 break; 70 } 71 } 72 } 73 74 }
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/my334420/p/6715556.html
總結(jié)
以上是生活随笔為你收集整理的Android攻城狮ScrollView的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《ShareX 》截图神器
- 下一篇: 实时训练Real-Time Traini