我使用ScrollPane,因为它内置了输入和抛出处理。我有一个滚动轮的图像,分为14个部分,滚动窗格本身是两个部分较短,以便将有一个部分在右侧和左侧,它可以滚动到任何一个方向。一旦滚动位置到达任何一个方向的末端,我想将滚动位置重置回中心。一遍又一遍地这样做应该会产生一个无限滚动轮的幻觉(希望如此)。
我遇到的问题是如何在代码中定位滚动窗格以重置图像,一旦它到达任何一端。到目前为止,我没有尝试设置滚动位置工作。我尝试了setScrollX()和scrollTo()方法。我还尝试将scrollpane的大小设置为不同的大小(与image大小相同,并且比image小两个部分)。在设置滚动值之前,我尝试调用scrollpane上的layout、invalidate和pack,以确保它的布局是正确的。我认为updateVisualScroll()可能会强制它更新滚动位置,但这也没有效果。
不管我做什么,它只是忽略所有改变滚动位置的调用,所以我显然遗漏了一些东西。在下面的代码中,我试图让滚动轮从图像的中心开始,相反,它的开始位置一直在左边。
public class MyScrollWheel extends Container<ScrollPane> {
private ScrollPane scrollPane;
private Image image;
private int scrollOffset;
public MyScrollWheel(){
Texture texture = new Texture(Gdx.files.internal("internal/scrollwheel.png"));
image = new Image(texture);
scrollOffset = (int)(image.getWidth()/14);
scrollPane = new ScrollPane(image);
scrollPane.setOverscroll(false, false);
setActor(scrollPane);
size(image.getWidth()-(scrollOffset*2), image.getHeight());
scrollPane.setScrollX(scrollOffset); // << this doesn't scroll
scrollPane.updateVisualScroll();
}
}
好吧,我希望能找到一些你可以借鉴的东西。我所做的只是扩展actor并让它接受一个纹理,这样我就可以使用Texture.wrap并用spritebatch.draw()
绘制它。我现在可以继续滚动它,基于滚动增量,你可以计算出它已经滚动了多远。我认为没有必要重置轮子,但是如果您真的想重置轮子,可以执行wheel.setscroll(0);
。
一个限制是它不是drawable
,因此不能像ninePatch
那样进行缩放。你必须给它一个普通的车轮纹理绘制它的大小,你想让它矛,你可以添加正常的缩放,但保持宽高比手动。然后添加边到它,也许覆盖一个渐变在那些创建深度。
滚动轮:
public class ScrollWheel extends Actor {
Texture wheelTexture;
private int scroll = 0;
public int getScroll() {
return scroll;
}
public void setScroll(int scroll) {
this.scroll = scroll;
}
public ScrollWheel(Texture texture)
{
wheelTexture = texture;
wheelTexture.setWrap(Texture.TextureWrap.Repeat, Texture.TextureWrap.ClampToEdge);
setWidth(texture.getWidth());
setHeight(texture.getHeight());
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.draw(wheelTexture, getX(), getY(), scroll, 0,
wheelTexture.getWidth(), wheelTexture.getHeight());
}
}
public class TestScreen implements Screen {
Stage stage;
ScrollWheel wheel;
public TestScreen() {
stage = new Stage();
Table t = new Table();
t.setFillParent(true);
stage.addActor(t);
wheel = new ScrollWheel(new Texture("hud/wheel_part.png"));
wheel.addListener(new DragListener() {
@Override
public void drag(InputEvent event, float x, float y, int pointer) {
super.drag(event, x, y, pointer);
wheel.setScroll(wheel.getScroll() + (int)getDeltaX());
}
});
t.add(wheel);
Gdx.input.setInputProcessor(stage);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(.3f, .36f, .42f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
stage.draw();
}
//...Other mandatory screen methods...
}
scroll
html" target="_blank">变量实际上保存滚动量,因此如果您希望将滚动量限制在0到100之间,只需在setscroll()
中添加此功能即可。
if (scroll > 100) scroll = 100;
else if (scroll < 0) scroll = 0;
然后可以向其添加一个步骤。因此,如果要使用滑块旋转图像,可以通过滚动*3,6f
或滚动*(maxScroll/maxStep)
设置旋转
我真的很喜欢这个结果,我将来会用这个来做我的滑块:D。我已经对它进行了一些扩展和修改,您可以在这里看到我的实现:https://youtu.be/rnlk5b-vfyg
我正在咨询你,因为我正在处理一些关于VSCODE的困扰我的事情。 我们目前正在创建一个应用程序,它应该在本地运行,所以我们的代码中确实有很多base64行。可以想象,这些字符串相当大: 这对我(和我的同事)来说是个问题,因为我们对这种轻量级的“Visual Studio”式编辑器很感兴趣,但又无法避免出现断行,这使得导航某些脚本非常复杂。
我在工作(Ubuntu)和家庭(Windows 7)中都使用PhpStorm。我在家里的版本中缺少的一件事是“从源代码滚动”按钮,如下所示: 在我的家庭版本中完全没有。我已经找过了,但是我得到的只是帮助设置“从源滚动”热键的插件的结果,关于它不能正常工作的报告,或者(看起来)不相关的事情,比如这里。 这个按钮是一个插件吗?还是它随基础安装一起来的?我想做的就是直接跳转到我当前打开的文件,截图中的按
问题内容: 目前,这是我的kv代码,无法滚动: 您如何使上面的kv代码可滚动?我知道Kivy ScrollView仅接受一个孩子,并且我已经使GridLayout成为新ScrollView的孩子。但这不起作用。有什么建议吗? 问题答案: 根据ScrollView的文档,您必须至少禁用ScrollView的子size_hint之一: 并绑定布局的大小以适应自身:
我正在使用Appium测试混合android应用程序。我想滚动到页面底部,然后点击一个链接。谁能告诉我如何滚动到页面底部吗。 非常感谢!
我使用的是RichTextFX,我很惊讶代码区没有默认启用滚动条。我怎样才能让它出现?
我尝试在JTable中捕获鼠标滚轮事件。不拖动时,它接收MouseWheelMove事件,但拖动时,它什么也不接收。我的猜测是鼠标滚轮事件被传递给与TransferHandler相关的东西,而不是JTable。 如何在拖动时检测鼠标滚轮运动?只要达到我的目的,任何其他方法都是受欢迎的。