(libgdx学习)ScrollPane

官方demo

/*******************************************************************************
 * Copyright 2011 See AUTHORS file.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/

package com.badlogic.gdx.tests;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.tests.utils.GdxTest;

public class ScrollPaneTest extends GdxTest {
	private Stage stage;
	private Table container;

	public void create () {
		stage = new Stage(0, 0, false);
		Skin skin = new Skin(Gdx.files.internal("data/uiskin.json"));
		Gdx.input.setInputProcessor(stage);

		// Gdx.graphics.setVSync(false);

		container = new Table();
		stage.addActor(container);
		container.setFillParent(true);

		Table table = new Table();
		// table.debug();

		final ScrollPane scroll = new ScrollPane(table, skin);
   
		InputListener stopTouchDown = new InputListener() {
			public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
				event.stop();
				return false;
			}
		};

		table.pad(10).defaults().expandX().space(4);
		for (int i = 0; i < 100; i++) {
			table.row();
			table.add(new Label(i + "uno", skin)).expandX().fillX();

			/**
			 * 往table中添加TextButton
			 */
//			TextButton button = new TextButton(i + "dos", skin);//创建一个TextButton
//			table.add(button);
//			button.addListener(new ClickListener() {//给TextButton添加点击事件
//				public void clicked (InputEvent event, float x, float y) {
//					System.out.println("click " + x + ", " + y);
//				}
//			});

			/**
			 * 这个音量条(类似)里面添加进度条
			 */
//			Slider slider = new Slider(0, 100, 1, false, skin);
//			slider.addListener(stopTouchDown); // Stops touchDown events from propagating to the FlickScrollPane.
//			table.add(slider);
//
//			table.add(new Label(i + "tres long0 long1 long2 long3 long4 long5 long6 long7 long8 long9 long10 long11 long12", skin));
			table.add(new Label(i + "tres long0 long1 ", skin));
		}

		final TextButton flickButton = new TextButton("Flick Scroll", skin.get("toggle", TextButtonStyle.class));
		flickButton.setChecked(true);
		flickButton.addListener(new ChangeListener() {
			public void changed (ChangeEvent event, Actor actor) {
				scroll.setFlickScroll(flickButton.isChecked());
			}
		});

		final TextButton fadeButton = new TextButton("Fade Scrollbars", skin.get("toggle", TextButtonStyle.class));
		fadeButton.setChecked(true);//将按钮设置为选中状态
		fadeButton.addListener(new ChangeListener() {
			public void changed (ChangeEvent event, Actor actor) {
				scroll.setFadeScrollBars(fadeButton.isChecked());
			}
		});
//
//		final TextButton smoothButton = new TextButton("Smooth Scrolling", skin.get("toggle", TextButtonStyle.class));
//		smoothButton.setChecked(true);
//		smoothButton.addListener(new ChangeListener() {
//			public void changed (ChangeEvent event, Actor actor) {
//				scroll.setSmoothScrolling(smoothButton.isChecked());
//			}
//		});
//
//		final TextButton onTopButton = new TextButton("Scrollbars On Top", skin.get("toggle", TextButtonStyle.class));
//		onTopButton.setChecked(true);
//		onTopButton.addListener(new ChangeListener() {
//			public void changed (ChangeEvent event, Actor actor) {
//				scroll.setScrollbarsOnTop(onTopButton.isChecked());
//			}
//		});

		/**
		 * 以下是Table的相关API的一些个人的解释
		 * row():开启一个新行
		 * right():向右移动一点,默认在最左边
		 * left():在最左边显示,默认在中间
		 * expandX():扩展X轴(最明显的效果就是用了这个以后位置向右移动了)
		 * add()添加一列
		 * right().expandX():可以理解为不断地向右拓展...
		 * space(10): 单元格与单元格之间的距离以及单元格与上边界之间的距离
		 * padBottom(0): 单元格与下边界之间的距离为0
		 * fill():将fillX()、fillY()设置成1
		 */
//		container.add(scroll).expand().fill().colspan(4);
		container.add(scroll).fill().expand().colspan(4);
		container.row().space(10).padBottom(0);
		container.add(flickButton).right().expandX();
//		container.add(onTopButton);
//		container.add(smoothButton);
		container.add(fadeButton).left().expandX();
	}

	public void render () {
		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
		stage.act(Gdx.graphics.getDeltaTime());
		stage.draw();
		Table.drawDebug(stage);
	}

	public void resize (int width, int height) {
		stage.setViewport(width, height, false);
	}

	public void dispose () {
		stage.dispose();
	}

	public boolean needsGL20 () {
		return false;
	}
}



以下是自己写的小demo

package com.example.groupactiontest;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Input.Peripheral;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;

public class MyGame implements ApplicationListener {
	Stage stage;
	Table container;
	
	@Override
	public void create() {
		stage = new Stage();
		container = new Table();
		stage.addActor(container);
		container.setFillParent(true);//这个必须要有,否则会显示不出来...
		
		Gdx.input.setInputProcessor(stage);
		
		
		Skin skin = new Skin(Gdx.files.internal("uiskin.json"));
		Table table = new Table();
		ScrollPane scroll = new ScrollPane(table,skin);
		
		
		/**
		 * 一单击屏幕就停止滚动
		 */
		InputListener stopTouchDown = new InputListener(){
			public boolean touchDown(com.badlogic.gdx.scenes.scene2d.InputEvent event, float x, float y, int pointer, int button) {
				event.stop();
				return false;
			};
		};
		
		table.pad(10).defaults().expandX().space(4);//这一行没有也不会对结果有太大影响....
		for(int i = 0 ; i < 100 ; ++i){//scroll里面的内容就是一百行
			table.row();//开启一个新行
			table.add(new Label("hello world" + i, skin));//这里不要写成table.add("hellozzt" + i),否则会报错...
		}
		
		container.add(scroll).fill().expand().colspan(4);
	}

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub

	}

	@Override
	public void render() {
		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
		
		stage.act();
		stage.draw();
	}

	@Override
	public void resize(int arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void resume() {
		// TODO Auto-generated method stub

	}

}



整理好后的demo

package com.example.groupactiontest;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Input.Peripheral;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.Table;

public class MyGame implements ApplicationListener {

	Stage stage;
	Table container;
	
	
	@Override
	public void create() {
		stage = new Stage();
		container = new Table();
		stage.addActor(container);
		container.setFillParent(true);
		
		Gdx.input.setInputProcessor(stage);
		
		Skin skin = new Skin(Gdx.files.internal("uiskin.json"));
		Table table = new Table();
		ScrollPane scroll = new ScrollPane(table, skin);
		
		for(int i = 0 ; i < 100 ; ++i){
			table.row();
			table.add(new Label("hellozzt" + i, skin));
		}
		
		container.add(scroll).fill().expand().colspan(4);
	}

	@Override
	public void dispose() {
		// TODO Auto-generated method stub

	}

	@Override
	public void pause() {
		// TODO Auto-generated method stub

	}

	@Override
	public void render() {
		Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
		
		stage.act();
		stage.draw();
	}

	@Override
	public void resize(int arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void resume() {
		// TODO Auto-generated method stub

	}

}


四、源码下载

http://download.csdn.net/detail/caihongshijie6/7105501

你可能感兴趣的:((libgdx学习)ScrollPane)