【问题标题】:Move horizontally an <ImageView> pressing a <Button>按 <Button> 水平移动 <ImageView>
【发布时间】:2016-09-25 11:45:18
【问题描述】:

我正在使用 Java 和 XML 在 AndroidStudio(没有 Libgdx、Gamemaker...)中开发 Space Invaders,但我遇到了一个问题...希望您能帮助我。

首先,这是我的app design.

如您所见,在 RelativeLayout 的底部,您可以找到一艘宇宙飞船和两个按钮(一个在左侧,另一个按钮在飞船的右侧)。按钮是不可见的。左侧按钮的 id 为“control_izquierda”,右侧的按钮为“control_derecha”。

当你按下左键时,飞船向右移动,当你按下右键时,飞船向左移动(这很好用)。

我的问题是在按下其中一个按钮时移动宇宙飞船(当我按住按钮时,宇宙飞船应该移动)。我尝试了不同的方法来尝试这个,但我找不到正确的解决方案。

这是我的java代码

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void actualizaPosicion(View v) {
        switch (v.getId()) {
            case R.id.control_derecha:
                findViewById(R.id.nave).setX(findViewById(R.id.nave).getX() - 30);
                break;
            case R.id.control_izquierda:
                findViewById(R.id.nave).setX(findViewById(R.id.nave).getX() + 30);
                break;
        }
    }

}

单击其中一个按钮时,我的 XML 调用“actualizaPosicion”方法。此方法检测是否单击了右键或左键,然后上传飞船位置(id为“nave”),我想当一个按钮被按住时,飞船移动,当一个按钮不再按下时,飞船停了。

感谢您的帮助。

非常感谢!

【问题讨论】:

    标签: java android button imageview


    【解决方案1】:

    你需要的是一个动画师处理动画Click here to view api docs

    一旦您了解了基本流程,您只需创建一个具有不同值的 xml 文件(在您的情况下为 translate)。因此,在单击 java 代码的按钮中,您可以简单地启动此动画 xml 文件。

    //示例xml

    <set android:shareInterpolator="false">
        <scale
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:fromXScale="1.0"
            android:toXScale="1.4"
            android:fromYScale="1.0"
            android:toYScale="0.6"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fillAfter="false"
            android:duration="700" />
        <set android:interpolator="@android:anim/decelerate_interpolator">
            <scale
               android:fromXScale="1.4"
               android:toXScale="0.0"
               android:fromYScale="0.6"
               android:toYScale="0.0"
               android:pivotX="50%"
               android:pivotY="50%"
               android:startOffset="700"
               android:duration="400"
               android:fillBefore="false" />
            <rotate
               android:fromDegrees="0"
               android:toDegrees="-45"
               android:toYScale="0.0"
               android:pivotX="50%"
               android:pivotY="50%"
               android:startOffset="700"
               android:duration="400" />
        </set>
    </set>
    

    //使用示例java代码

    ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
    Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    spaceshipImage.startAnimation(hyperspaceJumpAnimation);
    

    希望这会有所帮助。如果它对您有任何改变,请告诉我。

    编辑:我从评论中了解到,您正在寻找更复杂的解决方案,包括创建游戏,而不仅仅是简单的动画。

    所以我想与你分享一个资源,它肯定会帮助你完成这个和未来的项目。在这里不可能用答案来解释游戏开发的各个方面。

    Click here for full detailed android space game tutorial

    【讨论】:

    • 嗨,Nishant。我认为这个解决方案在这种情况下没有用。我需要的是:当我按住左键时,飞船必须向右移动,而我按住它时,当我不再按下按钮时,飞船将停止。我不能使用动画,我需要将 ImageView 移动到另一个位置。如果我先按住左键,飞船移动了 30 dp,然后我想按住右键将飞船向左移动,你的方法是没有用的。
    • 您好,我了解您的要求。我已经相应地更新了答案。相信这将解决您当前和未来与该游戏有关的所有问题。 您需要的不仅仅是动画。这是成熟的游戏开发,这就是为什么我不能在答案中给出所有代码示例。如果编辑后的链接是您正在寻找的教程,请接受我的回答。
    猜你喜欢
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2019-01-25
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多