Canvas中关于滚动条的制作

时间:2022-12-22 07:56:29
我现在在试着做一个类似QQ的界面,“我的好友”按钮我画出来了,按下OK也可以显示出我想要的字符,可现在我想做一个滚动条,滚动条只占整个屏幕的一部分,但做出来的滚动条不太合理,一当我想输出的字符变化时,滚动条中变化的那一段到不了最底下又或者超出最底下的范围。我上网搜,但是把不到合适的资料,现在正郁闷着....
希望各位兄弟能给小弟一些建议,谢谢!

10 个解决方案

#1


希望能得到参考代码或者思路,谢谢!
jiushao10@163.com

#2


有一个timer 类用定时器  
然后用drawString在屏幕上绘制
在timer 对象中有个run函数可以 ,改变drawString的参数;就可以绘制滚动条了 。
例如:
private Timer tm3=null;
if(tm3==null)
{
tm3=new Timer();
tm3start();
}
 public void tm3start()
 {
 tm3.schedule(new TimerTask(){
 public void run()
 {
 if(i>500)
 {
i=0;
 }
 else
 {
 i+=2;
 }
 }
 }, 0, 50);
 }
public  void drawMark(Graphics g)

 {
    g.setColor(255,0,0);
    g.drawString("滚动字幕 ", 240-MarkCount, 3, Graphics.LEFT|Graphics.TOP);
 }
public void paint(){
drawMark(g);
}

#3


你可以这样做,把要绘制的内容做索引,前提是没一行的东西的所占的行距是一样的。根据每一个元素的索引去绘制。按键控制屏幕坐标的移动。在canvas的边上绘制一个滚动条,根据实际的绘制元素所在的比例,调整滚动条的状态。

#4


this.scrollHeight = 13 *(this.screenHeight) * (this.screenHeight)/(20*numHeight); this.scrollY =13 * (-this.regionY)*(this.screenHeight)/(20*numHeight); 
scrollHeight 滚动条的长度 
scrollY 滚动条现在的位置Y坐标 
numHeight 显示的高度到了哪个位置
我现在用的是这个,不过还是不太合理,有时滚动条会超出scrollHeight范围

#5


边界的值你可以强制画到底部.毕竟是均分,会有你说的那种超出的情况的

#6


谢谢楼上兄弟!
真的没办法处理它不会超出了吗?

#7


if(滑块Y+滑块高>滚动条Y+滚动条高)//可以加行修正代码
滑块Y=滚动条Y+滚动条高-滑块高;

#8


我按照亚日的方法去想,想出来的式子都不太适合,可能自己太菜了,请问哪位高手有没有代码参考一下吗?谢谢

#9


我曾经也为这个东西苦恼过,不过现在看来还是很简单的,就两个比例嘛:
第一个,定义滚动条的高度h,已知滚动区域高度H,需要显示的东西的高度SH,和一次可显示的高度sh,那么
h/H = sh/SH;
第二个,与第一个类似,定义当前显示的物体的偏移(offset),已知当前滚动条的y,那么
y/H = offset/SH

#10


楼上的哥们,第二个算法我试了,不过offset有点大,滚动条都移动到下面去了

#1


希望能得到参考代码或者思路,谢谢!
jiushao10@163.com

#2


有一个timer 类用定时器  
然后用drawString在屏幕上绘制
在timer 对象中有个run函数可以 ,改变drawString的参数;就可以绘制滚动条了 。
例如:
private Timer tm3=null;
if(tm3==null)
{
tm3=new Timer();
tm3start();
}
 public void tm3start()
 {
 tm3.schedule(new TimerTask(){
 public void run()
 {
 if(i>500)
 {
i=0;
 }
 else
 {
 i+=2;
 }
 }
 }, 0, 50);
 }
public  void drawMark(Graphics g)

 {
    g.setColor(255,0,0);
    g.drawString("滚动字幕 ", 240-MarkCount, 3, Graphics.LEFT|Graphics.TOP);
 }
public void paint(){
drawMark(g);
}

#3


你可以这样做,把要绘制的内容做索引,前提是没一行的东西的所占的行距是一样的。根据每一个元素的索引去绘制。按键控制屏幕坐标的移动。在canvas的边上绘制一个滚动条,根据实际的绘制元素所在的比例,调整滚动条的状态。

#4


this.scrollHeight = 13 *(this.screenHeight) * (this.screenHeight)/(20*numHeight); this.scrollY =13 * (-this.regionY)*(this.screenHeight)/(20*numHeight); 
scrollHeight 滚动条的长度 
scrollY 滚动条现在的位置Y坐标 
numHeight 显示的高度到了哪个位置
我现在用的是这个,不过还是不太合理,有时滚动条会超出scrollHeight范围

#5


边界的值你可以强制画到底部.毕竟是均分,会有你说的那种超出的情况的

#6


谢谢楼上兄弟!
真的没办法处理它不会超出了吗?

#7


if(滑块Y+滑块高>滚动条Y+滚动条高)//可以加行修正代码
滑块Y=滚动条Y+滚动条高-滑块高;

#8


我按照亚日的方法去想,想出来的式子都不太适合,可能自己太菜了,请问哪位高手有没有代码参考一下吗?谢谢

#9


我曾经也为这个东西苦恼过,不过现在看来还是很简单的,就两个比例嘛:
第一个,定义滚动条的高度h,已知滚动区域高度H,需要显示的东西的高度SH,和一次可显示的高度sh,那么
h/H = sh/SH;
第二个,与第一个类似,定义当前显示的物体的偏移(offset),已知当前滚动条的y,那么
y/H = offset/SH

#10


楼上的哥们,第二个算法我试了,不过offset有点大,滚动条都移动到下面去了

相关文章