繁体   English   中英

我想在点击另一张图片后停止摇动 animation

[英]I want to stop shake animation after click on another image

我想一张一张地播放 animation,当我点击任何新图像时,之前的图像也会抖动,我想停止之前的图像 animation 立即点击任何新图像。

    public class MainActivity extends AppCompatActivity {

ImageView dog, lion, cat, cow, elephant, horse, nextB, backB, settingB;
MediaPlayer mediaPlayer;
Animation animShake;

// Firebase analyticals
private FirebaseAnalytics mFirebaseAnalytics;

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

    // Action bar hide
    Objects.requireNonNull(getSupportActionBar()).hide();

    // Obtain the FirebaseAnalytics instance.
    mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

    // find ids of items
    findId();

    // on click
    onClick();

    // Animation of shake of items when click
    animShake = AnimationUtils.loadAnimation(this, R.anim.shake);


}


private void onClick() {

    // lion click
    lion.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();

            lion.startAnimation(animShake);
            mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.lion);
            mediaPlayer.start();

        }
    });

    // cow click
    cow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();
            cow.startAnimation(animShake);
            mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.cow);
            mediaPlayer.start();

        }
    });

    // cat click
    cat.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();
            cat.startAnimation(animShake);
            mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.cat);
            mediaPlayer.start();
        }
    });

    // dog click
    dog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();
            dog.startAnimation(animShake);
            mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.dog);
            mediaPlayer.start();
        }
    });

    // elephant click
    elephant.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();
            elephant.startAnimation(animShake);
            mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.elephant);
            mediaPlayer.start();
        }
    });

    // horse click
    horse.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();

            horse.startAnimation(animShake);
            mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.horse);
            mediaPlayer.start();
        }
    });


    settingB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, SettingActivity.class);
            startActivity(intent);
        }
    });


}



// check is audio is playing already
public void check() {

    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
        mediaPlayer.reset();

    }
}



// find all ids here
private void findId() {
    dog = findViewById(R.id.dogImg);
    cat = findViewById(R.id.catImg);
    cow = findViewById(R.id.cowImg);
    lion = findViewById(R.id.lionImg);
    elephant = findViewById(R.id.elephantImg);
    horse = findViewById(R.id.horseImg);
    nextB = findViewById(R.id.next_btn);
    nextB.setVisibility(View.INVISIBLE);
    backB = findViewById(R.id.back_btn);
    backB.setVisibility(View.GONE);
    settingB = findViewById(R.id.setting);
}

当我单击任何新图像时,以前的图像也会抖动,我如何停止它并一次摇动一个图像。 我尝试了很多方法,但我找不到解决方案,任何人都可以帮助我。

创建一个保持最后一个图像被点击的变量,创建一个 metohd onClick 将图像作为输入动画,检查最后一个是否与实际不同,如果是,使用 lastClicked 图像停止 animation 并在新图像上启动动画, 就像是:

ImageView lastImageClicked = null

lion.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // check the condition is any audio is playing already
            check();
            animateImage(lion)

        }
    });
      
      .
      .
      .
      .
      .
 private void animateImage(ImageView actualImage){
    if(lastClicked != null && actualImage == lastClicked)
      //block animation on lastclicked using his id
      .
      .
      .
    //startAnimation on the other image using actualImage id

    //set the lastClicked Image to actual
    lastClicked = actualImage

    
 }

暂无
暂无

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

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