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