android 自定义控件gif视频教程,自定义控件 播放GIF动画

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Data;

using System.Linq;

using System.Text;

using System.Windows.Forms;

//debug 引用

using System.Diagnostics;

namespace CYSoft.TS.UI.StudentInfo

{

public partial class PicboxPlayGif : UserControl

{

private Image m_imgImage = null;

private EventHandler m_evthdlAnimator = null;

public PicboxPlayGif()

{

InitializeComponent();

this.SetStyle(ControlStyles.UserPaint, true);

this.SetStyle(ControlStyles.DoubleBuffer, true);

this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);

//为委托关联一个处理方法

m_evthdlAnimator = new EventHandler(OnImageAnimate);

Debug.Assert(m_evthdlAnimator != null);

}

private bool isPicboxFit = true;

[Description("pic 的宽和高和 真实gif的宽和高 是否要一致 ture=一致 false=不一致 ")]

public bool _isPicboxFit {

get { return isPicboxFit; }

set { this.isPicboxFit = value;

this.Invalidate();

}

}

private int picWidth = 0;

[Description("图片宽度(如果isPicboxFit=true 这个参数无意义)")]

public int _picWidth {

get { return picWidth; }

set {

if (!isPicboxFit) {

if(value!=0)

{

this.picWidth = value;

this.Invalidate();

}

}

}

}

private int picHeight = 0;

[Description("图片高度(如果isPicboxFit=true 这个参数无意义)")]

public int _picHeight {

get { return picHeight; }

set {

if (!isPicboxFit)

{

if (value != 0)

{

this.picHeight = value;

this.Invalidate();

}

}

}

}

private string imagePath = "C:\\Users\\Thinkpad\\Desktop\\素材\\WaitLoading.gif";

[Description("图片路径")]

public string _imagePath {

get { return imagePath; }

set { this.imagePath = value;

this.Invalidate();

}

}

private AA imageLayout = AA.Stretch;

[Description("图片在picbox中的显示方式")]

public AA _imageLayout {

get { return imageLayout; }

set {

this.imageLayout = value;

this.Invalidate();

}

}

public enum AA {

None,

Title,

Center,

Stretch,

Zoom

}

protected override void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

if (m_imgImage != null)

{

UpdateImage();

//不用picbox 直接输出

// e.Graphics.DrawImage(m_imgImage, new Rectangle(100, 100, m_imgImage.Width, m_imgImage.Height));

//image 格式

if(imageLayout==AA.None)

{

pic.BackgroundImageLayout = ImageLayout.None;

}else if(imageLayout==AA.Title)

{

pic.BackgroundImageLayout = ImageLayout.Tile;

}

else if (imageLayout == AA.Stretch)

{

pic.BackgroundImageLayout = ImageLayout.Stretch;

}

else if (imageLayout == AA.Zoom)

{

pic.BackgroundImageLayout = ImageLayout.Zoom;

}

else {

pic.BackgroundImageLayout = ImageLayout.Center;

}

pic.BackgroundImage = m_imgImage;

}

}

protected override void OnLoad(EventArgs e)

{

base.OnLoad(e);

//加载图片

m_imgImage = Image.FromFile(imagePath);

if (isPicboxFit)

{

this.Width = m_imgImage.Width;

this.Height = m_imgImage.Height;

}

else

{

this.Width = picWidth;

this.Height = picHeight;

}

//pic设置

pic.BackColor = Color.Transparent;

pic.Dock = DockStyle.Fill;

//BeginAnimate();

}

///

/// 播放或停止 动画

///

/// true=播放 false=停止

public void _PlayOrEndGif(bool isPlay) {

if (isPlay)

{

BeginAnimate();

}

else {

if (m_imgImage != null)

{

StopAnimate();

//m_imgImage = null;

}

}

}

//开始动画

private void BeginAnimate()

{

if (m_imgImage == null)

return;

if (ImageAnimator.CanAnimate(m_imgImage))

{

//当gif动画每隔一定时间后,都会变换一帧,那么就会触发一事件,

//该方法就是将当前image每变换一帧时,都会调用当前这个委托所关联的方法。

ImageAnimator.Animate(m_imgImage,m_evthdlAnimator);

}

}

//结束动画

private void StopAnimate()

{

if (m_imgImage == null)

return;

if (ImageAnimator.CanAnimate(m_imgImage))

{

ImageAnimator.StopAnimate(m_imgImage,m_evthdlAnimator);

}

}

//切换图片(帧图片)

private void UpdateImage()

{

if (m_imgImage == null)

return;

if (ImageAnimator.CanAnimate(m_imgImage))

{

//获得当前gif动画的下一步需要渲染的帧,当下一步任何对当前gif动画的操作都是对该帧进行操作)

ImageAnimator.UpdateFrames(m_imgImage);

}

}

private void OnImageAnimate(Object sender,EventArgs e)

{

//使得当前这个winfor重绘,然后去调用该winform的OnPaint()方法进行重绘

this.Invalidate();

}

private void PicboxPlayGif_Load(object sender, EventArgs e)

{

}

}

}

调用:

0818b9ca8b590ca3270a3433284dd417.png

上图右边是属性设置:

播放gif:

picboxPlayGif2._PlayOrEndGif(true);

停止gif:

picboxPlayGif2._PlayOrEndGif(true);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值