基本的思路就是我自己定义了一个叫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;
}
}再次跪谢
我获得了屏幕的宽高,也获得了每页能显示多少个文字。如果所给文字不超过一页就不出错,已超过就出错,就是在第二遍循环时出错。我是编程菜鸟,刚刚学习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;
}
}再次跪谢
解决方案 »
- 请问热心人,学安卓开发,该先学习JAVA中的SE/EE/ME哪个体系?
- android启动第3方应用问题
- 用SensorSimulator遇到问题 想求助下
- 底层驱动ko文件能不能通过apk发布,现在都用insmod手工注入内核调试,它们该怎么发布啊?
- 静态XML的SharedPreferences 怎么读取设置?
- 编译android2.2 错误:undefined references to 'gDvmJit' follow.
- 三方协议该不该签?
- 请问android SQL如何获取表的某一行某一列的数据
- 界面设置
- 最近工作需要学习 OpenMax 框架, 这东西怎么看啊 大神们给点建议 和 资料啊
- android工程导入没有错误,运行提示Unable to instantiate activity ComponentInfo
- Android 3.0反射机制的问题
flipper.addView(myGameView);
这行代码错误