Android Java 只播放一次 gif

问题描述 投票:0回答:2

当用户双击帖子时,我想要鹅,播放 gif。为此,我使用了

pl.droidsonroids.gif.GifImageView
,如下所示:

<pl.droidsonroids.gif.GifImageView
            android:layout_width="match_parent"
            android:layout_height="303dp"

            android:src="@drawable/likepopgif"
            android:visibility="invisible"
            />

为了开始它,我只是在需要时使用可见和不可见:

 holder.imgPost.setOnTouchListener(new View.OnTouchListener() {
                    @SuppressLint("ClickableViewAccessibility")
                    GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener(){

                        @SuppressLint("ClickableViewAccessibility")
                        @Override
                        public boolean onDoubleTap(MotionEvent e) {
                            Toast.makeText(visualizzaPost.this, "Liked post", Toast.LENGTH_SHORT).show();
                            holder.gifLike.setVisibility(View.VISIBLE);
                            holder.gifLike.setVisibility(View.INVISIBLE);
                            return super.onDoubleTap(e);
                        }
                    });
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        gestureDetector.onTouchEvent(event);
                        return false;
                    }
                });

但是,显然,不可见与动画长度的秒数是异步的。我正在寻找一个事件/属性或其他任何东西来告诉应用程序动画何时播放,然后我可以使其不可见。

如果我使用

app:loopCount="1"
当循环以这种方式结束时仍然是不道德的:

java android xml animated-gif
2个回答
1
投票

如果你想要一次播放 gif,你可以这样做:

<pl.droidsonroids.gif.GifImageView
            android:layout_width="match_parent"
            android:layout_height="303dp"

            android:src="@drawable/likepopgif"
            android:visibility="invisible"
            app:loopCount="1"
            />

如果你想知道 gif 何时结束,你可以使用

getDuration()
并检查它是否与
getCurrentPosition()

相同

0
投票
holder.imgPost.setOnTouchListener(new View.OnTouchListener() {
                    @SuppressLint("ClickableViewAccessibility")
                    GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.SimpleOnGestureListener(){

                        @SuppressLint("ClickableViewAccessibility")
                        @Override
                        public boolean onDoubleTap(MotionEvent e) {
                            Toast.makeText(visualizzaPost.this, "Liked post", Toast.LENGTH_SHORT).show();
                            holder.gifLike.setVisibility(View.VISIBLE);       
                      holder.gifLike.setImageResource(R.drawable.example);
                            GifDrawable gifDrawable = (GifDrawable) 
                            holder.gifLike.getDrawable();
                            gifDrawable.setLoopCount(1);

                            return super.onDoubleTap(e);
                        }
                    });
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        gestureDetector.onTouchEvent(event);
                        return false;
                    }
                });
© www.soinside.com 2019 - 2024. All rights reserved.