Как я могу сбросить таймер в ViewFlipper обратно на 0 - PullRequest
1 голос
/ 28 марта 2020

Приложение, которое я пытаюсь разработать, имеет ViewFlipper и несколько кнопок, соответствующих представлениям, вы нажимаете третью кнопку, а ViewFlipper меняет представления на 3-е изображение, проблема в том, что, как только я нажимаю эту кнопку, таймер не отображается. не сбрасывается до 0, например, если я был на втором изображении в течение 4 секунд, а затем, если я переключаюсь на 3-е изображение, после 1 се c ViewFlipper изменится на 4-е изображение, я хотел сбросить таймер обратно к 0, чтобы таким образом он оставался на том виде, на который я менялся, в течение 5 секунд.

Вот мой код:

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

        viewFlipper=findViewById(R.id.viewflipper);
        int images[]={R.drawable.icon_promotions,R.drawable.icon_promotions,R.drawable.icon_promotions};
        final int numimages=images.length;
        // ADD THE BUTTONS TO THE LINEARLAYOUT
        LinearLayout linearLayout=findViewById(R.id.btn_slide_layout);
        for(int f=0;f<numimages;f++){
                final int num=f;
                ImageView imageView2=new ImageView(this);
                LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                params2.setMargins(15, 0, 0, 0);
                imageView2.setLayoutParams(params2);
                imageView2.setId(f);
                if (f==0){
                    imageView2.setBackgroundResource(R.drawable.icon_message_maincolor);
                }
                else{
                    imageView2.setBackgroundResource(R.drawable.icon_promotions);
                }
                imageView2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        viewFlipper.setDisplayedChild(num);
                        viewFlipper.setFlipInterval(flippertime);
                    }
                });
                linearLayout.addView(imageView2);
            }

        for(int i=0;i<numimages;i++){
            ImageView imageView=new ImageView(this);
            imageView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
            imageView.setBackgroundResource(images[i]);
            flipperimages(imageView);
        }

        viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
            public void onAnimationStart(Animation animation) {
                changeslidericon(viewFlipper.getDisplayedChild());
            }
            public void onAnimationRepeat(Animation animation) {
                changeslidericon(viewFlipper.getDisplayedChild());
            }
            public void onAnimationEnd(Animation animation) {
                changeslidericon(viewFlipper.getDisplayedChild());
            }
            public void changeslidericon(int currentid){
                for(int i=0;i<numimages;i++){
                    if(currentid!=i){
                        findViewById(i).setBackgroundResource(R.drawable.icon_promotions);
                    }
                    else{
                        findViewById(i).setBackgroundResource(R.drawable.icon_message_maincolor);
                    }
                }
            }
        });
    }

    public void flipperimages(View image){

        viewFlipper.addView(image);

        viewFlipper.setFlipInterval(flippertime);
        viewFlipper.setAutoStart(true);

        viewFlipper.setInAnimation(this, R.anim.slide_in_right);
        viewFlipper.setOutAnimation(this, R.anim.slide_out_left);

    }

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

добавьте это к вашему image2 click listener:

       viewFlipper.setDisplayedChild(num);
            viewFlipper.stopFlipping();
            viewFlipper.setFlipInterval(flippertime);
            viewFlipper.startFlipping();
0 голосов
/ 28 марта 2020

Хорошо, я нашел ответ, мне нужно было использовать обработчик. Сначала проблема заключалась в том, что обработчик перезаписывал другие предыдущие обработчики, а когда я переключался на одно представление, а затем переходил на другое, оба обработчика все еще ожидали так что все, что мне нужно было добавить, это строка handler.removeCallbacks(runnable);

Вот мой полный текущий код:

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

        viewFlipper=findViewById(R.id.viewflipper);
        int images[]={R.drawable.icon_promotions,R.drawable.icon_promotions,R.drawable.icon_promotions};
        final int numimages=images.length;
        // ADD THE BUTTONS TO THE LINEARLAYOUT
        LinearLayout linearLayout=findViewById(R.id.btn_slide_layout);
        for(int f=0;f<numimages;f++){
                final int num=f;
                ImageView imageView2=new ImageView(this);
                LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                params2.setMargins(15, 0, 0, 0);
                imageView2.setLayoutParams(params2);
                imageView2.setId(f);
                if (f==0){
                    imageView2.setBackgroundResource(R.drawable.icon_message_maincolor);
                }
                else{
                    imageView2.setBackgroundResource(R.drawable.icon_promotions);
                }
                imageView2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        try{
                            handler.removeCallbacks(runnable);
                        } catch(Exception e){}
                        viewFlipper.setDisplayedChild(num);
                        viewFlipper.stopFlipping();
                        handler = new Handler();
                        runnable = new Runnable() {
                            @Override
                            public void run() {
                                viewFlipper.showNext();
                                viewFlipper.startFlipping();
                            }
                        };   handler.postDelayed(runnable, flippertime);
                    }
                });
                linearLayout.addView(imageView2);
            }

        for(int i=0;i<numimages;i++){
            ImageView imageView=new ImageView(this);
            imageView.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
            imageView.setBackgroundResource(images[i]);
            flipperimages(imageView);
        }

        viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
            public void onAnimationStart(Animation animation) {
                changeslidericon(viewFlipper.getDisplayedChild());
            }
            public void onAnimationRepeat(Animation animation) {
                changeslidericon(viewFlipper.getDisplayedChild());
            }
            public void onAnimationEnd(Animation animation) {
                changeslidericon(viewFlipper.getDisplayedChild());
            }
            public void changeslidericon(int currentid){
                for(int i=0;i<numimages;i++){
                    if(currentid!=i){
                        findViewById(i).setBackgroundResource(R.drawable.icon_promotions);
                    }
                    else{
                        findViewById(i).setBackgroundResource(R.drawable.icon_message_maincolor);
                    }
                }
            }
        });
    }

    public void flipperimages(View image){

        viewFlipper.addView(image);

        viewFlipper.setFlipInterval(flippertime);
        viewFlipper.setAutoStart(true);

        viewFlipper.setInAnimation(this, R.anim.slide_in_right);
        viewFlipper.setOutAnimation(this, R.anim.slide_out_left);

    }
...