#c# #xamarin #xamarin.android
#c# #xamarin #xamarin.android
Вопрос:
Я использую образец для воспроизведения GIF-файлов в своем приложении,
но методы start(), stop() и pause() не работают.
пример: введите описание ссылки здесь
пакет nuget: установка-пакет Karamunting.Android.Корал.AndroidGifDrawable
Это мой код введите описание изображения здесь
Спасибо, что помогли мне…
Ответ №1:
🎊 Добро пожаловать в SO 🎊
Это исключение возникает из-за того, что вы приводите неправильный объект к неправильному типу ( GifDrawable
).
Чтобы достичь того, чего вы хотите, вы должны сначала получить Drawable
object, обратившись GifImageView.Drawable
к property, а затем привести его к GifDrawable
. Теперь вы можете правильно обращаться к этим методам ( .Stop()
, .Start()
) .
Пример кода:
var gifImageView0 = FindViewById<GifImageView>(Resource.Id.gif6);
var stop = FindViewById<Button>(Resource.Id.button1);
stop.Click = (s, e) =>
{
//
(gifImageView0.Drawable as GifDrawable)?.Stop();
};
Ответ №2:
Добро пожаловать в SO!
Я проверил Karamunting.Android.Корал.Похоже, что пакет Nuget, доступный для Android, не предоставляет руководств для Xamarin Android для его вызова. И есть только 721 загрузка. После тестирования на моем локальном сайте у него много ошибок при использовании его методов, совместно используемых с GitHub. Я думаю, потребуется больше времени для решения проблем, связанных с тем, что указанное приведение недопустимо.
Поэтому я предлагаю установить Refractor.GifImageView от JamesMontemagno. Я проверил это на локальном сайте, и это так удобно.И вы можете обратиться к его GitHub, чтобы узнать, как использовать в Xamarin Android.
Установите его:
Пример кода выглядит следующим образом:
public class MainActivity : AppCompatActivity
{
Felipecsl.GifImageViewLibrary.GifImageView gifImageView;
//PL.DroidsOnRoids.Gif.GifImageView gifImageViewTrans;
Button btnToggle;
Button btnStart;
Button btnStop;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
gifImageView = FindViewById<Felipecsl.GifImageViewLibrary.GifImageView>(Resource.Id.gifImageView);
//gifImageViewTrans = FindViewById<PL.DroidsOnRoids.Gif.GifImageView>(Resource.Id.gifImageView2);
btnToggle = FindViewById<Button>(Resource.Id.btnToggle);
btnStart = FindViewById<Button>(Resource.Id.btnStart);
btnStop = FindViewById<Button>(Resource.Id.btnStop);
// From Drawable
Stream input = Resources.OpenRawResource(Resource.Drawable.timg);
// You should convert the "input" into Byte Array
byte[] bytes = ConvertByteArray(input);
gifImageView.SetBytes(bytes);
gifImageView.StartAnimation();
btnToggle.Click = (sender, e) =>
{
try
{
if (gifImageView.IsAnimating)
gifImageView.StopAnimation();
else
gifImageView.StartAnimation();
}
catch (Exception ex)
{
}
};
btnStart.Click = BtnStart_Click;
btnStop.Click = BtnStop_Click;
}
private void BtnStop_Click(object sender, EventArgs e)
{
gifImageView.StopAnimation();
}
private void BtnStart_Click(object sender, EventArgs e)
{
gifImageView.StartAnimation();
}
private byte[] ConvertByteArray(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
ms.Write(buffer, 0, read);
return ms.ToArray();
}
}
}
Эффект: