国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android Libgdx中ScrollPane和Actor事件沖突問題的解決辦法

2019-10-22 18:28:25
字體:
來源:轉載
供稿:網友

詳解Android Libgdx中ScrollPane和Actor事件沖突問題的解決辦法

在Libgdx的使用過程中,經常會用到ScrollPane這個widget,來實現滑動效果, 如下所示:

Android,Libgdx中ScrollPane和Actor的問題解決辦法,Libgdx中ScrollPane和Actor事件沖突問題

但是如果想在上面的效果上添加一點擴展,比如ScrollPane中的Actor可以從ScrollPane中移出來,并添加到Stage中,則需要添加額外的邏輯

具體代碼參考如下:

/** * Created by Danny.姜 on 17/7/26. */public class TestAdapter extends ApplicationAdapter {  Stage stage;  ScrollPane scrollPane;  Table table;  private float lastStageX;  private float lastStageY;  ActorGestureListener actorGestureListener;  private InputListener inputListener = new InputListener() {    @Override    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {      Log.e("DANNY", "actor touch down");      if (pointer == 0) {        lastStageX = event.getStageX();        lastStageY = event.getStageY();        inStage = false;      }      return true;    }    @Override    public void touchDragged(InputEvent event, float x, float y, int pointer) {      Log.e("DANNY", "actor touch dragging");      Actor actor = event.getListenerActor();      if (cancelTouchFocus) {        float currentX = event.getStageX();        float currentY = event.getStageY();        actor.moveBy(currentX - lastStageX, currentY - lastStageY);        lastStageX = currentX;        lastStageY = currentY;        if (!inStage) {          Vector2 vector2 = actor.localToStageCoordinates(new Vector2());          actor.setPosition(vector2.x, vector2.y);          stage.addActor(actor);          stage.cancelTouchFocusExcept(this, actor);          inStage = true;        }      }    }    @Override    public void touchUp(InputEvent event, float x, float y, int pointer, int button) {      Log.e("DANNY", "actor touch up");      cancelTouchFocus = false;    }  };  @Override  public void create() {    super.create();    stage = new Stage();    stage.setDebugAll(true);    Gdx.input.setInputProcessor(stage);    actorGestureListener = new ActorGestureListener() {      @Override      public boolean longPress(Actor actor, float x, float y) {        Log.e("DANNY", "actor gesture listener long pressed");        cancelTouchFocus = true;        return super.longPress(actor, x, y);      }    };    table = new Table();    scrollPane = new ScrollPane(table, new ScrollPane.ScrollPaneStyle());    scrollPane.setSize(stage.getWidth(), 500);    scrollPane.setScrollingDisabled(false, true);    scrollPane.setCancelTouchFocus(false);    scrollPane.setSmoothScrolling(true);    scrollPane.setFlingTime(0);    stage.addActor(scrollPane);    initTable();  }  private boolean cancelTouchFocus = false;  private boolean inStage = false;  private void initTable() {    for (int i = 0; i < 10; i++) {      BaseGdxActor actor = new BaseGdxActor(new TextureRegion(          new Texture("badlogic.jpg")));      table.add(actor).width(actor.getWidth()).pad(10);      actor.addListener(actorGestureListener);      actor.addListener(inputListener);    }  }  @Override  public void render() {    super.render();    Gdx.gl.glClearColor(1, 1, 1, 1);    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);    stage.act();    stage.draw();  }}

實現效果如下:

Android,Libgdx中ScrollPane和Actor的問題解決辦法,Libgdx中ScrollPane和Actor事件沖突問題

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 霍邱县| 宽甸| 乐至县| 青海省| 五大连池市| 霍林郭勒市| 灌南县| 伊宁县| 巨野县| 汉阴县| 肃南| 延寿县| 新泰市| 香格里拉县| 宜春市| 汝州市| 梨树县| 萝北县| 高平市| 化隆| 河源市| 东丰县| 竹溪县| 广南县| 舟山市| 梧州市| 巴林左旗| 隆德县| 涡阳县| 瑞安市| 平江县| 若尔盖县| 沙田区| 平利县| 佛冈县| 和静县| 新化县| 滦南县| 潍坊市| 石泉县| 兖州市|