在做一個(gè)小的電子書程序,要求電子書具有放大縮小的功能,所以肯定的要用到TextView的滾動(dòng)效果。同樣的還要求TextView在水平方向和垂直方向上都可以滾動(dòng)。剛做的時(shí)候,也是沒(méi)有頭緒,后來(lái)想到了,TextView有一個(gè)ScrollTo或者ScrollBy方法,何不如此一用呢!
1.前期找資料
?????? 因?yàn)閯傞_(kāi)始,不知道怎么能夠滾動(dòng),所以先去網(wǎng)上查找資料,垂直滾動(dòng)很容易實(shí)現(xiàn),直接使用TextView的
??? setMovementMethod(ScrollingMovementMethod.getInstance());
方法就可以了。可是水平滾動(dòng)如何實(shí)現(xiàn)?晚上說(shuō)在TextView的前面在套一層HorizontalScrollView,這個(gè)我也做了嘗試,效果不佳,因?yàn)槟阌锌赡芤诔绦蛑袆?dòng)態(tài)的改變TextView的布局,這樣子程序中就會(huì)出錯(cuò);在者如果你設(shè)定了你的TextView為500px,而你的內(nèi)容一行要有700px,這時(shí)你的內(nèi)容不會(huì)自動(dòng)的切為兩行;第三,在添加一個(gè)HorizontalScrollView感覺(jué)很不舒服,起碼界面是這樣。所以綜合這幾點(diǎn),我放棄了使用這種方法。接著就想到用ScrollTo方法,首先需要聲明的是,采用這種方法,你的程序中是沒(méi)有水平和垂直滾動(dòng)條的,這個(gè)你可以自己去優(yōu)化實(shí)現(xiàn),理論上是絕對(duì)可行的。我現(xiàn)在說(shuō)的是我能保證文本可以水平和垂直滾動(dòng),但沒(méi)有保證有滾動(dòng)條。好,接下來(lái),King就以一個(gè)實(shí)例做一下簡(jiǎn)單的使用。
2.我的實(shí)現(xiàn)。(里面注釋很詳細(xì),就不過(guò)多說(shuō)了)
3.后續(xù)
??? 我的文件是jinju.txt,是放在assets文件夾下面的,當(dāng)然你可以放在其他的位置,指定你自己的路徑就可以了,main.xml里面只有一個(gè)TextView,所以也沒(méi)貼出來(lái),下面看幾張效果圖:
http://hi.baidu.com/ljlkings/blog/item/ffe87e6cc51843cf80cb4a55.html
設(shè)置帶滾動(dòng)條的TextView
本來(lái)是想做一個(gè)顯示文字信息的,當(dāng)文字很多時(shí)View的高度不能超過(guò)一個(gè)固定的值,當(dāng)文字很少時(shí)View的高度小于那個(gè)固定值時(shí),按View的高度顯示。因?yàn)镾crollView沒(méi)有maxHeight,無(wú)法滿足需求,只好另找方法了。
View本身是可以設(shè)置ScrollBar,這樣就不一定需要依賴ScrollView了。TextView有個(gè)屬性maxLine,這樣也就滿足了需求了,只要設(shè)置一個(gè)TextView帶ScrollBar的,然后設(shè)置maxLine就可以了。
還需要在代碼了設(shè)置TextView可以滾動(dòng)。
Android中計(jì)算一個(gè)文件在TextView中的顯示
http://hi.baidu.com/ljlkings/blog/item/47f1afdb8874c9fd39012fdd.html
1.前期找資料
?????? 因?yàn)閯傞_(kāi)始,不知道怎么能夠滾動(dòng),所以先去網(wǎng)上查找資料,垂直滾動(dòng)很容易實(shí)現(xiàn),直接使用TextView的
??? setMovementMethod(ScrollingMovementMethod.getInstance());
方法就可以了。可是水平滾動(dòng)如何實(shí)現(xiàn)?晚上說(shuō)在TextView的前面在套一層HorizontalScrollView,這個(gè)我也做了嘗試,效果不佳,因?yàn)槟阌锌赡芤诔绦蛑袆?dòng)態(tài)的改變TextView的布局,這樣子程序中就會(huì)出錯(cuò);在者如果你設(shè)定了你的TextView為500px,而你的內(nèi)容一行要有700px,這時(shí)你的內(nèi)容不會(huì)自動(dòng)的切為兩行;第三,在添加一個(gè)HorizontalScrollView感覺(jué)很不舒服,起碼界面是這樣。所以綜合這幾點(diǎn),我放棄了使用這種方法。接著就想到用ScrollTo方法,首先需要聲明的是,采用這種方法,你的程序中是沒(méi)有水平和垂直滾動(dòng)條的,這個(gè)你可以自己去優(yōu)化實(shí)現(xiàn),理論上是絕對(duì)可行的。我現(xiàn)在說(shuō)的是我能保證文本可以水平和垂直滾動(dòng),但沒(méi)有保證有滾動(dòng)條。好,接下來(lái),King就以一個(gè)實(shí)例做一下簡(jiǎn)單的使用。
2.我的實(shí)現(xiàn)。(里面注釋很詳細(xì),就不過(guò)多說(shuō)了)
public class Test_ScrollingText extends Activity implements OnTouchListener, OnGestureListener { // 實(shí)現(xiàn)觸摸和手勢(shì)的接口 private TextView mContent; private DisplayMetrics metrics; private int mScreenWidth, mScreenHeight;// 屏幕分辨率 private GestureDetector mDetector;// 手勢(shì)監(jiān)聽(tīng)者 private String mDisplayTxt = ""; private int mCurrentX = 0, mCurrentY = 0;// TextView左上角的像素值 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);// 全屏 metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); mScreenWidth = metrics.widthPixels; mScreenHeight = metrics.heightPixels;// 獲得屏幕分辨率 setContentView(R.layout.main);// 指定布局 mContent = (TextView) findViewById(R.id.content); resetTextView(); loadFile(); mDetector = new GestureDetector(this); mContent.setOnTouchListener(this); mContent.setLongClickable(true);// 初始化,注意這三步是必不可少的,但沒(méi)順序的限制 mContent.setText(mDisplayTxt);// 顯示文件內(nèi)容 } // 加載文件 private void loadFile() { // TODO Auto-generated method stub String mTemp; try { InputStream mInputStream = getAssets().open("jinju.txt"); BufferedReader mBufferedInputStream = new BufferedReader( new InputStreamReader(mInputStream)); while ((mTemp = mBufferedInputStream.readLine()) != null) { mDisplayTxt += mTemp; } mDisplayTxt = mDisplayTxt.replace(' ', '\n'); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 重置TextView的大小 private void resetTextView() { // TODO Auto-generated method stub LinearLayout.LayoutParams mParams = (LayoutParams) mContent .getLayoutParams(); mParams.width = mScreenWidth + 300; mParams.height = mScreenHeight + 500; mContent.setLayoutParams(mParams); } // 觸摸TextView @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return mDetector.onTouchEvent(event);// 工作交給手勢(shì)監(jiān)聽(tīng)者 } // 下面的各個(gè)函數(shù)是OnGestureListener的實(shí)現(xiàn),具體動(dòng)作這里不做贅述 @Override public boolean onDown(MotionEvent e) { // TODO Auto-generated method stub return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { // TODO Auto-generated method stub int mLayoutWidth = mContent.getLayoutParams().width; // 獲得TextView的寬度 int mLayoutHeight = mContent.getLineCount() * mContent.getLineHeight(); // 獲得TextView的實(shí)際高度 if (mCurrentX + distanceX >= 0) { if (mCurrentX + distanceX > mLayoutWidth - mScreenWidth) { mCurrentX = mLayoutWidth - mScreenWidth; } else { mCurrentX = (int) (mCurrentX + distanceX); } } else { mCurrentX = 0; } if (mCurrentY + distanceY >= 0) { if (mCurrentY + distanceY > mLayoutHeight - mScreenHeight) { mCurrentY = mLayoutHeight - mScreenHeight; } else { mCurrentY = (int) (mCurrentY + distanceY); } } else { mCurrentY = 0; } mContent.scrollTo(mCurrentX, mCurrentY); // 使文本滾動(dòng)到指定的地方 return false; } @Override public void onShowPress(MotionEvent e) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent e) { // TODO Auto-generated method stub return false; } }
3.后續(xù)
??? 我的文件是jinju.txt,是放在assets文件夾下面的,當(dāng)然你可以放在其他的位置,指定你自己的路徑就可以了,main.xml里面只有一個(gè)TextView,所以也沒(méi)貼出來(lái),下面看幾張效果圖:



http://hi.baidu.com/ljlkings/blog/item/ffe87e6cc51843cf80cb4a55.html
設(shè)置帶滾動(dòng)條的TextView
本來(lái)是想做一個(gè)顯示文字信息的,當(dāng)文字很多時(shí)View的高度不能超過(guò)一個(gè)固定的值,當(dāng)文字很少時(shí)View的高度小于那個(gè)固定值時(shí),按View的高度顯示。因?yàn)镾crollView沒(méi)有maxHeight,無(wú)法滿足需求,只好另找方法了。
View本身是可以設(shè)置ScrollBar,這樣就不一定需要依賴ScrollView了。TextView有個(gè)屬性maxLine,這樣也就滿足了需求了,只要設(shè)置一個(gè)TextView帶ScrollBar的,然后設(shè)置maxLine就可以了。
<TextView android:id="@+id/text_view" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="false" android:maxLines="10" android:scrollbars="vertical" />
還需要在代碼了設(shè)置TextView可以滾動(dòng)。
TextView textView = (TextView)findViewById(R.id.text_view); textView.setMovementMethod(ScrollingMovementMethod.getInstance());
Android中計(jì)算一個(gè)文件在TextView中的顯示
http://hi.baidu.com/ljlkings/blog/item/47f1afdb8874c9fd39012fdd.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
