基本的思路就是我自己定义了一个叫MyGameView的View,里面有一个onDraw的方法 .我用来绘制文字 ,  我在另一个类中添加了一个ViewFlipper 的方法. 用来滑动切换View我想在ViewFlipper中添加个循环,   通过虚幻每次我给onDraw传个新的值. 让它重新绘制一次 , 可是出错了.   我暂时找不到原因 ,  想知道是不是我的思路不对.
我获得了屏幕的宽高,也获得了每页能显示多少个文字。如果所给文字不超过一页就不出错,已超过就出错,就是在第二遍循环时出错。我是编程菜鸟,刚刚学习android和java,真的很希望各位大神能办帮忙,帮我度过这个难关。
代码如下:
package bnu.ep;import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.ViewFlipper;public class TestFlipTest extends Activity implements OnGestureListener 
{
private ViewFlipper flipper;
private GestureDetector  detector;
private GameView myGameView; //文字 String txt = "威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,语的恐吓威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,语的恐吓"; //字数
int m_length = txt.length(); public void onCreate(Bundle savedInstanceState) 
{
super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); //获取屏幕属性
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
//窗口宽
int screenWindth = dm.widthPixels;
//窗口高
int screenHeight = dm.heightPixels;
detector = new GestureDetector(this);
flipper = (ViewFlipper)this.findViewById(R.id.viewFlipper01);
//每行字数
int number = screenWindth/20;
//每页行数
int m_line = screenHeight/20;
//每页最大字数
int ever_length = number * m_line; myGameView = new GameView(this); myGameView.setScreenWindth(screenWindth);
myGameView.setScreenHeight(screenHeight); //总字数
//this.m_length = myGameView.m_length;
//页数
int m_page = m_length/number/m_line ;
//当前绘制文字
String m_txt;
//当前显示到第几个字
int word_number = 0; flipper.addView(addTextView("step22222222222221")); flipper.addView(addTextView("宽" + screenWindth + "高" + screenHeight));  for(;m_page >= 0;m_page--)
{
if (word_number + ever_length + number <= txt.length()) 
{
m_txt = txt.substring(word_number,word_number + ever_length );
}
else
{
m_txt = txt.substring(word_number,txt.length());
}
//myGameView = new GameView(this);

myGameView.settxt(m_txt);

//flipper.addView(myGameView);

word_number += ever_length;

//myGameView = new GameView(this); }
flipper.addView(myGameView); }

private View addTextView(String text) 
{
// TODO Auto-generated method stub
TextView tv = new TextView(this);
tv.setText(text);
tv.setGravity(1);
return tv;
}
public boolean onDown(MotionEvent e) 
{
// TODO Auto-generated method stub
return false;
} public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) 
{
if(e1.getX() - e2.getX() >120)
{
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,R.anim.push_left_out));
this.flipper.showNext();
return true;
}
else if(e1.getX() - e2.getX() < 120)
{
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_in));
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.push_right_out));
this.flipper.showPrevious();
return true;
}
return false;
} public boolean onTouchEvent(MotionEvent event)
{
return this.detector.onTouchEvent(event); } public void onLongPress(MotionEvent e) 
{
// TODO Auto-generated method stub } public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) 
{
// TODO Auto-generated method stub
return false;
} public void onShowPress(MotionEvent e) 
{
// TODO Auto-generated method stub } public boolean onSingleTapUp(MotionEvent e)
{
// TODO Auto-generated method stub
return false;
}
}
package bnu.ep;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;
import android.view.View;public class GameView extends View 
{ //窗口宽度
int screenWindth;
//窗口gaodu
int screenHeight;
//每行字数
int number ;
//每页行数
int m_line;
//页数
int m_page;
// 实例化绘制方法
Paint m_paint = new Paint();
//String s = "\ssssssssssssssssssssssssss,语的恐吓威吓是指对员,工或者下属进行言sssssssssssssssssssssssssssss,语的恐1吓";
private String  s;
private int k; static int staitc_a = 1;
public GameView(Context context) 
{
super(context); // TODO Auto-generated constructor stub
}
protected void onDraw(Canvas canvas)
{
//每行字数
number = screenWindth/20;
//每页行数
m_line = screenHeight/20; Log.i("screen", screenWindth +"");
// 设置字体大小
int xyz = 0;
//Y坐标
int yPoint = 0;
// 字符长度
int m_length = s.length(); m_paint.setTextSize(20);
super.onDraw(canvas);
canvas.drawARGB(255, 255, 255, 255);
Log.i("k",k+"");
for (k = 0; k < m_length; k += number)
{
yPoint = yPoint + 20; if (k + number <= s.length()) 
{
canvas.drawText(s.substring(k,k + number), 0, yPoint, m_paint);

else
{
canvas.drawText(s.substring(k, s.length()), 0, yPoint, m_paint);
}
}
}
public int getScreenWindth() {
return screenWindth;
} public void setScreenWindth(int s) {
screenWindth = s;
}
public int getScreenHeight() {
return screenHeight;
} public void setScreenHeight(int screenHeight) {
this.screenHeight = screenHeight;
}
public String gettxt() {
return s;
} public void settxt(String txt) {
this.s = txt;
}
}再次跪谢