>source

아래는 1-20의 임의의 숫자를 생성하는 안드로이드 응용 프로그램의 코드 스 니펫이며 사용자는 숫자를 추측 한 후 버튼을 누르면 숫자, 사용자가 작성한 숫자 (val) 및 앱이 생성 한 숫자를 추측합니다 (rand_no)가 비교됩니다.

비교 후 표시되는 텍스트가 사라져서 추측하고 버튼을 누를 때마다 새로운 출력이 생성되도록하고 싶습니다.

기능을 호출 할 때마다 (버튼을 누를 때마다) 가시성을 INVISIBLE로 설정 한 다음 비교가 이루어지고 출력이 표시되면 가시성을 VISIBLE로 다시 설정합니다. 그러나 놀랍게도 동작은 한 번만 발생하며 첫 번째 함수 호출 후에 텍스트가 더 이상 표시되지 않습니다.

public class MainActivity extends AppCompatActivity {
Random random=new Random();
int rand_no=random.nextInt(20)+1;
public void function(View v)
{
    EditText e1=(EditText)findViewById(R.id.editText); //for text input by 
                                                       //the user
    TextView e2=(TextView) findViewById(R.id.textOutput); //for output text
    int val=Integer.parseInt(e1.getText().toString());
    e2.setVisibility(View.INVISIBLE);  //setting output to INVISIBLE
    if(rand_no<val)
    {
        e2.setText("Go Lower!");
    }
    if(rand_no>val)
    {
        e2.setText("Go Higher!");
    }
    if(rand_no==val)
    {
        e2.setText("You guessed right!");
    }
    e2.setVisibility(View.VISIBLE); //setting output to VISIBLE
      /* Fading away the output*/
    e2.animate().setStartDelay(2000);
    e2.animate().alpha(0).setDuration(1000);
}

따라서 함수가 끝난 후 컨트롤이 다시 전달된다는 것을 알고 싶습니다. 레이아웃 파일? 또는 함수를 다시 실행하기 위해 버튼을 여러 번 눌러도 가시성이 한 번만 할당되는 것처럼 보이기 때문에 MainActivity.java에 남아 있습니다.

  • 답변 # 1

    와이즈 비즈

    흐리게 변하기 때문에 다시 표시해야합니다.

    따옴표가 붙은 줄을 아래 코드로 바꾼다

    e2.animate().alpha(0).setDuration(1000);

    e2.animate().alpha(0).setDuration(1000) .setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { e2.animate().alpha(1).setDuration(500); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } });

관련 자료

  • 이전 javascript - 배열의 일부인 이미지를 표시 할 수 없습니다
  • 다음 linux - 다양한 직렬 센서에 대해 우분투 1804에서 직렬 입력으로 USB를 읽을 수 없음