Android I';我试图让TextView每472毫秒生成一个随机数,五次。我将如何使用循环来执行此操作?

Android I';我试图让TextView每472毫秒生成一个随机数,五次。我将如何使用循环来执行此操作?,android,Android,所以,我有一个文本视图,它生成一个随机数。我需要TextView每472毫秒生成一个随机数,五次。所以我点击屏幕,一个随机数出现,然后472毫秒后另一个数字出现,这个重复,直到显示了五个随机数。我知道我需要使用循环,但我会使用什么条件来确保只生成五个随机数 以下是我的XML: <LinearLayout android:id="@+id/linearLayout" android:layout_width="0dp" android:layout_height="0

所以,我有一个文本视图,它生成一个随机数。我需要TextView每472毫秒生成一个随机数,五次。所以我点击屏幕,一个随机数出现,然后472毫秒后另一个数字出现,这个重复,直到显示了五个随机数。我知道我需要使用循环,但我会使用什么条件来确保只生成五个随机数

以下是我的XML:

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:clickable="true"
    android:onClick="perform_action"
    android:orientation="vertical"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="center_horizontal|center_vertical"
            android:layout_marginBottom="75dp"
            android:gravity="center"
            android:textSize="400sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent" />

    </RelativeLayout>

</LinearLayout>
</android.support.constraint.ConstraintLayout>

创建一个计数器以检查其被触摸的次数

int counter=0;
创建一个触摸式监听器

mView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //paste logic here
        return false;
    }
});
逻辑将是正确的

if(counter<=5){
perform_action();
counter++;
}
if(counter您应该使用

添加以下依赖项:

implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
然后,当您单击按钮时:

final List< Integer > randomNumbers = new ArrayList<>( );
Observable.intervalRange( 0, 5, 0, 472, TimeUnit.MILLISECONDS )
        .map( aLong -> {
            int previous = randomNumbers.size( ) > 0 ? randomNumbers.get(
                    randomNumbers.size( ) - 1 ) : -1;
            int randomNumber = generateRandomNumber();
            while( randomNumber == previous ) generateRandomNumber();
            randomNumbers.add( randomNumber );
            return randomNumber;
        } )
        .observeOn( AndroidSchedulers.mainThread( ) )
        .subscribe(integer -> {
            TextView tv = (TextView) findViewById(R.id.textView1);
            tv.setText(String.valueOf(integer));
        } );

private int generateRandomNumber( )
{
    Random r = new Random( );
    int minNumber = 1;
    int maxNumber = 9;
    return r.nextInt( ( maxNumber - minNumber ) + 1 ) + minNumber;
}
final ListrandomNumbers=newarraylist();
可观察。间隔范围(0,5,0,472,TimeUnit.ms)
.地图(沿->{
int previous=randomNumbers.size()>0?randomNumbers.get(
randomNumbers.size()-1):-1;
int randomNumber=GeneratorAndomNumber();
while(randomNumber==上一代)generateRandomNumber();
随机数。添加(随机数);
返回随机数;
} )
.observeOn(AndroidSchedulers.mainThread())
.订阅(整数->{
TextView tv=(TextView)findViewById(R.id.textView1);
tv.setText(String.valueOf(integer));
} );
私有int-generateRandomNumber()
{
Random r=新的Random();
int minNumber=1;
int maxNumber=9;
返回r.nextInt((maxNumber-minNumber)+1)+minNumber;
}

就是这样!

这可以工作,但时间段似乎有变化。有时显示5个数字,但有时显示少于5个,时间段较慢。有没有解决方法?在循环完成之前,是否多次单击按钮?在这种情况下,是否允许此行为(同时多个循环)还是不?不。我想这只是重复同一个数字。有什么方法可以防止吗?谢谢。我的“GeneratorDomainNumber”正在获取无法解决的方法错误。您是否有我没有的导入?现在它可以工作,但有时应用程序不会响应我的单击/触摸。使用每x毫秒给您一个勾号的
倒计时如何?
final List< Integer > randomNumbers = new ArrayList<>( );
Observable.intervalRange( 0, 5, 0, 472, TimeUnit.MILLISECONDS )
        .map( aLong -> {
            int previous = randomNumbers.size( ) > 0 ? randomNumbers.get(
                    randomNumbers.size( ) - 1 ) : -1;
            int randomNumber = generateRandomNumber();
            while( randomNumber == previous ) generateRandomNumber();
            randomNumbers.add( randomNumber );
            return randomNumber;
        } )
        .observeOn( AndroidSchedulers.mainThread( ) )
        .subscribe(integer -> {
            TextView tv = (TextView) findViewById(R.id.textView1);
            tv.setText(String.valueOf(integer));
        } );

private int generateRandomNumber( )
{
    Random r = new Random( );
    int minNumber = 1;
    int maxNumber = 9;
    return r.nextInt( ( maxNumber - minNumber ) + 1 ) + minNumber;
}