示例#1
0
        /**
         * 指针移到上一页页首
         */
        private void pageUp()
        {
            Java.Lang.String strParagraph = new Java.Lang.String();
            Vector           lines        = new Vector(); // 页面行
            int paraSpace = 0;

            mPageLineCount = mVisibleHeight / (mFontSize + mLineSpace);
            while ((lines.Size() < mPageLineCount) && (curBeginPos > 0))
            {
                Vector paraLines  = new Vector();                   // 段落行
                byte[] parabuffer = readParagraphBack(curBeginPos); // 1.读取上一个段落

                curBeginPos -= parabuffer.Length;                   // 2.变换起始位置指针
                try
                {
                    strParagraph = new Java.Lang.String(parabuffer, charset);
                }
                catch (UnsupportedEncodingException e)
                {
                    e.PrintStackTrace();
                }
                strParagraph = new Java.Lang.String(strParagraph.ReplaceAll("\r\n", "  "));
                strParagraph = new Java.Lang.String(strParagraph.ReplaceAll("\n", " "));

                while (strParagraph.Length() > 0)
                { // 3.逐行添加到lines
                    int paintSize = mPaint.BreakText(strParagraph.ToString(), true, mVisibleWidth, null);
                    paraLines.Add(strParagraph.Substring(0, paintSize));
                    strParagraph = new Java.Lang.String(strParagraph.Substring(paintSize));
                }
                lines.AddAll(0, paraLines.ToArray());

                while (lines.Size() > mPageLineCount)
                { // 4.如果段落添加完,但是超出一页,则超出部分需删减
                    try
                    {
                        curBeginPos += (new Java.Lang.String(lines.Get(0).ToString())).GetBytes(charset).Length; // 5.删减行数同时起始位置指针也要跟着偏移
                        lines.Remove(0);
                    }
                    catch (UnsupportedEncodingException e)
                    {
                        e.PrintStackTrace();
                    }
                }
                curEndPos      = curBeginPos;                                             // 6.最后结束指针指向下一段的开始处
                paraSpace     += mLineSpace;
                mPageLineCount = (mVisibleHeight - paraSpace) / (mFontSize + mLineSpace); // 添加段落间距,实时更新容纳行数
            }
        }