Layer effects animation in ArcMap
AnimationTypeLayerEffects.cs
// Copyright 2012 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.Animation;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.ADF.CATIDs;

namespace AnimationDeveloperSamples
{
    [Guid("52b48920-7eb0-4e3b-8be6-b3983e59e739")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("AnimationDeveloperSamples.AnimationTypeLayerEffects")]
    public class AnimationTypeLayerEffects : IAGAnimationType, IAGAnimationTypeUI
    {
        #region COM Registration Function(s)
        [ComRegisterFunction()]
        [ComVisible(false)]
        static void RegisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryRegistration(registerType);

            //
            // TODO: Add any COM registration code here
            //
        }

        [ComUnregisterFunction()]
        [ComVisible(false)]
        static void UnregisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryUnregistration(registerType);

            //
            // TODO: Add any COM unregistration code here
            //
        }

        #region ArcGIS Component Category Registrar generated code
        /// <summary>
        /// Required method for ArcGIS Component Category registration -
        /// Do not modify the contents of this method with the code editor.
        /// </summary>
        private static void ArcGISCategoryRegistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            MapAnimationTypes.Register(regKey);

        }
        /// <summary>
        /// Required method for ArcGIS Component Category unregistration -
        /// Do not modify the contents of this method with the code editor.
        /// </summary>
        private static void ArcGISCategoryUnregistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            MapAnimationTypes.Unregister(regKey);

        }

        #endregion
        #endregion
        private string[] propName;
        private esriAnimationPropertyType[] propType;
        private string typeName;

        #region constructor
        public AnimationTypeLayerEffects()
        {
            propName = new string[2];
            propName[0] = "Brightness";
            propName[1] = "Contrast";

            propType = new esriAnimationPropertyType[2];
            propType[0] = esriAnimationPropertyType.esriAnimationPropertyInt;
            propType[1] = esriAnimationPropertyType.esriAnimationPropertyInt;

            typeName = "Layer Effects";
        }
        #endregion

        #region IAGAnimationType members
        public esriAnimationClass AnimationClass
        {
            get
            {
                return esriAnimationClass.esriAnimationClassGeneric;
            }
        }
        public object get_AnimationObjectByID(IAGAnimationContainer pContainer, int objectID)
        {
            IArray objectArray = get_ObjectArray(pContainer);
            return (object)objectArray.get_Element(objectID);
        }
        public int get_AnimationObjectID(IAGAnimationContainer pContainer, object pObject)
        {
            IArray objectArray = get_ObjectArray(pContainer);
            int objCount = objectArray.Count;

            int i = 0;
            for (i = 0; i < objCount; i++)
            {
                if (pObject == objectArray.get_Element(i))
                    break;
            }
            return i;
        }
        public string get_AnimationObjectName(IAGAnimationContainer pContainer, object pObject)
        {
            ILayer layer = (ILayer)pObject;
            if (layer != null)
            {
                return layer.Name;
            }
            else
                return "";
        }
        public bool get_AppliesToObject(object pObject)
        {
            if (pObject is ILayer)
            {
                ILayerEffects layerEffects = (ILayerEffects)pObject;
                if (layerEffects.SupportsBrightnessChange && layerEffects.SupportsContrastChange)
                    return true;
                else
                    return false;
            }
            else
            {
                return false;
            }
        }
        public UID CLSID
        {
            get
            {
                UID uid = new UIDClass();
                uid.Value = "{52b48920-7eb0-4e3b-8be6-b3983e59e739}";
                return uid;
            }
        }
        public UID KeyframeCLSID
        {
            get
            {
                UID uid = new UIDClass();
                uid.Value = "{965a7a4e-6371-427a-b8f7-ca433c262dc8}";
                return uid;
            }
        }
        public string Name
        {
            get
            {
                return typeName;
            }
        }
        public IArray get_ObjectArray(IAGAnimationContainer pContainer)
        {
            IActiveView view = pContainer.CurrentView as IActiveView;
            IArray array = new ArrayClass();

            ILayer layer1;
            int layerCount = view.FocusMap.LayerCount;
            int i = 0;
            for (i = 0; i < layerCount; i++)
            {
                layer1 = view.FocusMap.get_Layer(i);
                if (get_AppliesToObject(layer1))
                {
                    array.Add(layer1);
                }
            }

            return array;
        }

        public int PropertyCount
        {
            get
            {
                return 2;
            }
        }

        public string get_PropertyName(int index)
        {
            if (index >= 0 && index < 2)
                return propName[index];
            else
                return null;
        }

        public esriAnimationPropertyType get_PropertyType(int index)
        {
            return propType[index];
        }

        public void ResetObject(IAGAnimationContainer pContainer, object pObject)
        {
            return;
        }

        public void UpdateTrackExtensions(IAGAnimationTrack pTrack)
        {
            return;
        }
        #endregion

        #region IAGAnimationTypeUI members
        public IStringArray get_ChoiceList(int propIndex, int columnIndex)
        {
            return null;
        }
        public int get_ColumnCount(int propIndex)
        {
            if (propIndex == 0)
                return 1;
            else
                return 1;
        }
        public string get_ColumnName(int propIndex, int columnIndex)
        {
            if (propIndex == 0)
            {
                return "Brightness";
            }
            else if (propIndex == 1)
            {
                return "Contrast";
            }

            return null;
        }
        #endregion
    }
}