当用户双击帖子时,我想要鹅,播放 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"
当循环以这种方式结束时仍然是不道德的:
如果你想要一次播放 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()
相同
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;
}
});