UI界面事件监听

事件监听方法

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using System;
using UnityEngine.UI;
/// <summary>
/// 按钮监听
/// </summary>
public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger
{
    public delegate void VoidDelegate(GameObject go);
    public VoidDelegate onClick;
    public VoidDelegate onDown;
    public VoidDelegate onEnter;
    public VoidDelegate onExit;
    public VoidDelegate onUp;
    public VoidDelegate onSelect;
    public VoidDelegate onUpdateSelect;
    public VoidDelegate onDeselect;
    public VoidDelegate onCancel;
    static public EventTriggerListener Get(GameObject go)
    {
        EventTriggerListener listener = go.GetComponent<EventTriggerListener>();
        if (listener == null) listener = go.AddComponent<EventTriggerListener>();
        return listener;
    }

    public override void OnPointerClick(PointerEventData eventData)
    {
        if (onClick != null) onClick(gameObject);
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        if (onDown != null) onDown(gameObject);
    }
    public override void OnPointerEnter(PointerEventData eventData)
    {
        if (onEnter != null) onEnter(gameObject);
    }
    public override void OnPointerExit(PointerEventData eventData)
    {
        if (onExit != null) onExit(gameObject);
    }
    public override void OnPointerUp(PointerEventData eventData)
    {
        if (onUp != null) onUp(gameObject);
    }
    public override void OnSelect(BaseEventData eventData)
    {
        if (onSelect != null) onSelect(gameObject);
    }
    public override void OnUpdateSelected(BaseEventData eventData)
    {
        if (onUpdateSelect != null) onUpdateSelect(gameObject);
    }
    public override void OnDeselect(BaseEventData eventData)
    {
        if (onDeselect != null) onDeselect(gameObject);
    }
    public override void OnCancel(BaseEventData eventData)
    {
        if (onCancel != null) onCancel(gameObject);
    }
}

事件监听方法的调用

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using DG.Tweening;
/// <summary>
/// 控制任务栏的显示和收回
/// </summary>
namespace GameLogic.UI
{
    public class UIImageCtrl : MonoBehaviour
    {
        [SerializeField]
        private Toggle TaskCtrl_tog;//任务button
        [SerializeField]
        private Dropdown DropDown;//任务button

        [SerializeField]
        private Sprite show;//按钮的图片
        [SerializeField]
        private Sprite hide;//按钮的图片
        [SerializeField]
        private GameObject HideShowUI;//需要隐藏的UI;
        void Start()
        {
            if (DropDown != null)
            {
                EventTriggerListener.Get(DropDown.gameObject).onClick += DropDownOnClick;
                EventTriggerListener.Get(DropDown.gameObject).onSelect += DropDownOnSelect;
            }
        }

        public void OnClick()
        {
            if (TaskCtrl_tog != null)
            {
                if (TaskCtrl_tog.isOn)
                {
                    TaskCtrl_tog.image.sprite = hide;
                    if (HideShowUI)
                    {
                        HideShowUI.SetActive(false);
                    }
                }
                else
                {
                    TaskCtrl_tog.image.sprite = show;
                    if (HideShowUI)
                    {
                        HideShowUI.SetActive(true);
                    }
                }
            }
        }

        private void DropDownOnSelect(GameObject go)
        {
            Debug.Log("下啦列表关闭");
          DropDown.gameObject.GetComponent<Image>().sprite = show;
        }
        private void DropDownOnClick(GameObject go)
        {
            Debug.Log("下啦列表开启");
            DropDown.gameObject.GetComponent<Image>().sprite = hide;
        }
    }
}

原文地址:https://www.cnblogs.com/qinshuaijun/p/8529882.html

时间: 2024-08-08 22:36:46

UI界面事件监听的相关文章

UI事件监听的击穿

什么是UI事件监听的击穿 在游戏视图中,有两个UI界面叠在一起的时候,单击一个空白处,却触发了被覆盖在下层了UI界面中的单击事件,这就是单击击穿了上层界面. 假设场景中放置了一个箱子,单击箱子会触发一个开箱事件,如果单击一个UI,恰好UI在视觉上将箱子覆盖了,那么它也许就会触发箱子的单击事件. 如何避免和解决UI事件监听的击穿 第一种方法:用一层BoxCollider覆盖,进行遮挡. 在界面底板上Attach一个BoxCollider. 第二种方法:使用EventMask Unity的Camer

事件监听与计算机界面

1.事件监听 package 事件监听;import java.awt.*;import java.awt.event.*; public  class Frame2 extends Frame implements ActionListener{ private Button button1; public Frame2() {  super("个人信息");      this.setSize(250,200);//设计组件的尺寸      this.setLocation(800

窗体界面与事件监听 Monitor Interface

日常生活中窗体随处可见,各种聊天.直播.游戏.音影.都是各种窗体组成的软件. 一般而言一个窗体界面就是一个JFrame对象. JFrame的位置在我们的一个javax.swing.JFrame. 先创建一个界面并设置可见 //创建一个界面类 public class Interface {//显示界面的方法 public void intUI(){ //创建一个顶级容器 javax.swing.JFrame frame=new javax.swing.JFrame("登陆界面"); /

事件监听 计算机界面

1.事件监听: package 事件监听;import java.awt.*;import java.awt.event.*;public  class Frame2 extends Frame implements ActionListener{ private Button button1; public Frame2() {  super("个人信息");      this.setSize(250,220);//设计组件的尺寸      this.setLocation(800

事件监听 计算器界面

1.事件监听: package 事件监听;import java.awt.*;import java.awt.event.*;public  class Frame2 extends Frame implements ActionListener{ private Button button1; public Frame2() {  super("个人信息");      this.setSize(250,220);//设计组件的尺寸      this.setLocation(800

[基础控件]---状态切换控件CompoundButton及其子类CheckBox、RadioButton、ToggleButton、switch事件监听与场景使用

一.事件监听 对于普通的Button,对其进行事件监听Google官方给出了常见的三种监听方式:1.对每一个button设置事件监听器button.setOnClickListener(View.OnclickListener  listener);此种方法当button按钮较多时代码显得多.乱.不够简洁明了. 2.在Activity中实现接口View.OnclickListener,然后重写void onClick(View v)方法,在方法中通过switch(v.getId())予以区分不同

WebView使用详解(二)——WebViewClient与常用事件监听

登录|注册     关闭 启舰 当乌龟有了梦想-- 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8月书讯      每周荐书:Java Web.Python极客编程(评论送书) WebView使用详解(二)--WebViewClient与常用事件监听 2016-05-28 11:24 20083人阅读 评论(13) 收藏 举报  分类: 5.andriod开发(148)  版权声明:本文为博主原创文章,未经博主

Java中的事件监听机制

鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象 2.事件监听方法: addMouseListener(MouseListener ml) ;该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作:捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理. addAction

.NET事件监听机制的局限与扩展

.NET中把“事件”看作一个基本的编程概念,并提供了非常优美的语法支持,对比如下C#和Java代码可以看出两种语言设计思想之间的差异. // C#someButton.Click += OnSomeButtonClick; // JavasomeButton.addActionListener( new ActionListener(){ public void actionPerformed(){ ... } }); 在我们的软件中就大量使用事件来对监听者与发布者解耦,但也遇到了一些局限,在这