自定义view系列(3)--给自定义View添加点击事件

这几天一直在看《android开发艺术探索》和《android群英传》中关于自定义view的章节,结合着网上大神的一些心得分享,感觉自定义view这一块受益匪浅,这里做个心得笔记,主要记录一下view与用户交互的一些知识。

自定义view与用户交互用的最多的就是单击事件,其次的还有双击事件、长按事件、滑动事件等,所以就需要做好view的事件监听。

如果我们继承了View,也绘制好了控件,但是不重写onTouchEvent()方法的话,设置点击事件一般也是没用的,但也不是一定没用,下面先介绍一种比较简单的点击事件实现方式,也是从张鸿洋大神的一篇博客中看到的。

设置view的点击事件实现方式一:

在View的构造方法中直接setOnClickListener,如下代码:

public TouchEventTest(Context context) {
        this(context, null);
    }

    public TouchEventTest(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public TouchEventTest(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        this.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Logger.e("view内部设置OnClickListener","");
            }
        });
    }
如上代码即可实现该自定义view的点击监听,但是有很大的局限性,首先这样设置监听很死板,不能供外部调用,其次经过测试,如果你这样写了代码,并且又重写的该View的OnTouchEvent()方法,那么不管你的onTouchEvent方法中是直接return super.onTouchEvent()还是做了任何其他逻辑,都不能触发这个监听事件,也就是说在这种情况下这种方式设置监听根本没用了,而这直接影响到了我们自定义View的扩展性,所以建议别这么用,虽然简单,但是麻烦事也多,不过这种方式也有一种适用情况,就是如果自定义View真的只需要自己内部处理逻辑,不需要外部的参与,那么这样设置也行,不过真的不推荐大家使用这种方式除非业务
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
根据提供的引用内容,我们可以了解到在Vue2中,我们可以通过在父组件中使用`<router-view>`标签来渲染子组件,同时也可以通过在子组件中使用`this.$emit()`方法来向父组件传递数据。而在Vue3中,我们可以使用`<router-view>`标签作为一个组件来看待,可以绑定自定义属性传值,也可以绑定自定义事件。若依是一个基于Vue3的前端开发框架,因此我们可以通过在若依中自定义`<router-view>`组件来实现自己的需求。 具体来说,我们可以通过在若依中创建一个自定义组件,例如`MyRouterView`,并在其中使用`<router-view>`标签来渲染子组件。同时,我们可以在`MyRouterView`组件中定义自己需要的属性和事件,并通过`v-bind`和`v-on`指令来绑定这些属性和事件。例如: ``` <template> <router-view v-bind="$attrs" v-on="$listeners" /> </template> <script> export default { name: 'MyRouterView', // 定义需要的属性和事件 props: { myProp: String }, emits: ['myEvent'] } </script> ``` 然后,在父组件中使用`<my-router-view>`标签来渲染子组件,并通过`v-bind`和`v-on`指令来绑定自定义属性和事件。例如: ``` <template> <my-router-view my-prop="myValue" v-on:my-event="handleMyEvent" /> </template> <script> export default { methods: { handleMyEvent() { // 处理自定义事件 } } } </script> ``` 这样,我们就可以在若依中自定义`<router-view>`组件,并实现自己的需求了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值