繁体   English   中英

切换if语句的大小写返回值

[英]android - switch case return value for if statement

在我的应用程序中,我有一张随机选择的图像。 图像出现在屏幕上,用户可以将其滑动到侧面。 每当它是图像a ,计数器都应该计数,但事实并非如此。 我的int getMyRandomResId的返回值在这种情况下是错误的,还是在哪里呢?

public class MainActivity extends Activity
{
    private ImageView imageView;
    public int sco = 0;
    float x1, x2;
    float y1, y2;
    final Random rand = new Random();    

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

        score = (TextView)findViewById(R.id.textView1);
        score.setText(String.valueOf(sco));
    }

    int getMyRandomResId()
    {
        int imag = rand.nextInt(4);

        switch (imag)
        {
            case 0:
                return R.drawable.a;
            case 1:
                return R.drawable.b;
            case 2:
                return R.drawable.c;
            default:
                return R.drawable.d;
        }
    }

    public boolean onTouchEvent(MotionEvent touchevent)
    {
        final ViewPropertyAnimator animator = imageView.animate();

        switch (touchevent.getAction())
        {

        case MotionEvent.ACTION_DOWN:
        {

            x1 = touchevent.getX();
            y1 = touchevent.getY();
            break;
        }
        case MotionEvent.ACTION_UP:
        {

            x2 = touchevent.getX();
            y2 = touchevent.getY();

            //if left to right sweep event on screen
            if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1))
            {

                if(getMyRandomResId() == R.drawable.a)
                {
                    sco++;
                    score.setText(String.valueOf(sco));
                }

                animationRunning = true;
                animator.translationX((imageView.getWidth()))
                .setDuration(250)
                .setListener(new AnimatorListenerAdapter()
                {
                    @Override
                    public void onAnimationEnd(Animator animation)
                    {


                        imageView.setTranslationX(0);
                        imageView.setImageResource(getMyRandomResId());
                        animationRunning = false;

                    }
                })
                .start();
            }

        }
    }
}

每次创建Random rand = new Random(); 它从同一点开始。 这是来自文档的报价

如果使用相同的种子创建两个Random实例,并且对每个实例进行相同的方法调用序列,则它们将生成并返回相同的数字序列。

您只能创建一次Random类的实例。 例如,像这样:

public class MainActivity extends Activity { final Random random = new Random(); ...

我想你在这里想念什么。 我已经测试了您发布的代码,它就像一个魅力。 MainActivity.java

public class MainActivity extends AppCompatActivity {

    public int sco = 0;

    float x1, x2;

    float y1, y2;

    private ImageView imageView;

    @Override
    public boolean onTouchEvent(MotionEvent touchevent) {
        final ViewPropertyAnimator animator = imageView.animate();

        switch (touchevent.getAction()) {

            case MotionEvent.ACTION_DOWN: {

                x1 = touchevent.getX();
                y1 = touchevent.getY();
                break;
            }
            case MotionEvent.ACTION_UP: {

                x2 = touchevent.getX();
                y2 = touchevent.getY();

                //if left to right sweep event on screen
                if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1)) {

                    final int randomResId = getMyRandomResId();
                    Log.e("ResId: ", String.valueOf(randomResId));
                    if (randomResId == R.drawable.ic_assignment_late_black_24dp) {
                        sco++;
                        Log.e("NewScoId", String.valueOf(sco));
                    }

                    animator.translationX((imageView.getWidth()))
                            .setDuration(250)
                            .setListener(new AnimatorListenerAdapter() {
                                @Override
                                public void onAnimationEnd(Animator animation) {

                                    imageView.setTranslationX(0);
                                    imageView.setImageResource(randomResId);

                                }
                            })
                            .start();
                }

            }
        }
        return true;
    }

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

        imageView = (ImageView) findViewById(R.id.x);
    }

    int getMyRandomResId() {
        Random rand = new Random();
        int imag = rand.nextInt(4);

        switch (imag) {
            case 0:
                return R.drawable.ic_assignment_late_black_24dp;
            case 1:
                return R.drawable.ic_android_black_24dp;
            case 2:
                return R.drawable.ic_battery_charging_30_black_24dp;
            default:
                return R.drawable.ic_exposure_neg_2_black_24dp;
        }
    }
}

activity_main.xml

<RelativeLayout android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <ImageView
        android:id="@+id/x"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:text="Hello World!"
        app:srcCompat="@drawable/ic_android_black_24dp" />
</RelativeLayout>

并使用通过create Vector资产向导创建的随机图像。 我的LogCat(轻扫时)如下所示:

 E/ResId:: 2130837590
 E/ResId:: 2130837590
 E/ResId:: 2130837589
 E/ResId:: 2130837588
 E/NewScoId: 1
 E/ResId:: 2130837587
 E/ResId:: 2130837590
 E/ResId:: 2130837588
 E/NewScoId: 2
 E/ResId:: 2130837587
 E/ResId:: 2130837589
 E/ResId:: 2130837588
 E/NewScoId: 3
[...]

getMyRandomResId()这个方法很好用,尽管foxanna的建议在这里也更好,但我所做的一些更改我已经测试过并为我工作

public class MainActivity extends Activity
{
    private ImageView imageView;
    public int sco = 0;
    float x1, x2;
    float y1, y2;
    Random rand;

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

        score = (TextView)findViewById(R.id.textView1);
        score.setText(String.valueOf(sco));
        rand = new Random();
    }

int getMyRandomResId()
{
    int imag = rand.nextInt(4);

    switch (imag)
    {
        case 0:
            sco++;
            return R.drawable.a;
        case 1:
            return R.drawable.b;
        case 2:
            return R.drawable.c;
        default:
            return R.drawable.d;
    }
}

public boolean onTouchEvent(MotionEvent touchevent)
{
    final ViewPropertyAnimator animator = imageView.animate();

    switch (touchevent.getAction())
    {

    case MotionEvent.ACTION_DOWN:
    {

        x1 = touchevent.getX();
        y1 = touchevent.getY();
        break;
    }
    case MotionEvent.ACTION_UP:
    {

        x2 = touchevent.getX();
        y2 = touchevent.getY();

        //if left to right sweep event on screen
        if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1))
        {

            if(getMyRandomResId() == R.drawable.a)
            {
                score.setText(String.valueOf(sco));
            }

            animationRunning = true;
            animator.translationX((imageView.getWidth()))
            .setDuration(250)
            .setListener(new AnimatorListenerAdapter()
            {
                @Override
                public void onAnimationEnd(Animator animation)
                {


                    imageView.setTranslationX(0);
                    imageView.setImageResource(getMyRandomResId());
                    animationRunning = false;

                }
            })
            .start();
        }

    }
}
}

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM