【问题标题】:OnTouchListener on invisible view不可见视图上的 OnTouchListener
【发布时间】:2014-08-13 16:58:49
【问题描述】:

所以我想做的就是触摸屏幕的某个部分,其中隐藏了一个不可见的视图。

触摸之后,视图应该会淡入。 问题:当我触摸视图时,Listener 没有被触发。

我尝试过的方法:view.setImageAlpha(0)、view.setAlpha(0)、view.setVisibility(View.INVISIBLE) 当我设置 alpha=1 时,监听器工作正常。

提前致谢。

编辑: 感谢@Viswanath L 提供的出色解决方案,他在帖子中提到了第二个解决方法。

我只是想给出一个小代码示例,以防有人不知道它是如何工作的:

我想要什么:我想触摸屏幕的右上角,在这个位置,一个视图(myView)应该淡入。

   fadeInListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                System.out.println("TRIGGERED");
//The screen size here is 1080x1920(vertical)
                if (event.getRawX() > 800 && event.getRawY() > 1640) {
                     final AlphaAnimation fadeIn = new AlphaAnimation(0, 1);
                     fadeIn.setDuration(500);
                     fadeIn.setFillAfter(true);
                     myView.startAnimation(fadeIn);
                }
            }
            return false;
        }
    };

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    layout.setOnTouchListener(fadeInListener);
}

布局是:

this.layout = (RelativeLayout) findViewById(R.id.layout);

而myView应该放在最右边的角落,很重要:

myView.setVisibility(View.Gone);

希望这会有所帮助。

【问题讨论】:

  • 你能保持它可见,但改变背景颜色、字体颜色等...以匹配背景,使其不可见?
  • 并非如此。我能做的是放置一个带有 bg 颜色的视图,然后让这个视图淡出,所以看起来我原来的“隐藏”视图淡入了。这将是我的解决方法,但如果有任何更清洁的方法,比如特殊的东西可见性或 alpha 选项来完成这项工作,那就太好了。
  • android:alpha=0 与监听器配合得很好。

标签: android animation view listener invisible


【解决方案1】:

INVISBLE 表示您正在尝试将侦听器添加到不存在的视图中。您只能将侦听器添加到可见视图。

解决方法

1) 尝试制作一个可见但与背景颜色相同的虚拟视图。

2) 尝试为 parent 设置监听器并检查位置(位置是否 属于 INVISIBLE 视图)。

【讨论】:

  • 1) 是的,我也想到了这个解决方法。想知道是否有更好的解决方案。 2)嗯..有趣的想法。我会试试的,谢谢!
  • 是的,第二个解决方案效果很好,谢谢!我用代码示例编辑了我的第一篇文章。
【解决方案2】:

onTouchListener 不会为不可见的View 触发。您可以制作 2 个完全相同的视图,一个在另一个下面,一个下面有地图。它将是可见的,因此可以触摸,但它会被上面的视图遮挡,就像他们在这里所做的一样:http://blahti.wordpress.com/2012/06/26/images-with-clickable-areas/

【讨论】:

    【解决方案3】:

    在你的 xml 中试试这个:

    <View
            android:id="@+id/my_inv_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@color/blue"
            />
    
    <View
            android:id="@+id/my_touch_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            />
    

    并像这样设置点击监听器:

    final View mTouchView = findViewById(R.id.my_touch_view);
    final View mInvView = findViewById(R.id.my_inv_view);
    mInvView.setVisibility(View.INVISIBLE);
        mTouchView.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v) {
                mInvView.setVisibility(View.VISIBLE);
            }
    });
    

    【讨论】:

    • 他想触摸同一个不可见的视图以使其可见。不是另一种观点。
    • 您不能触摸不可见的视图。这是“技巧”:您创建一个视图,该视图具有与您的不可见视图完全相同的尺寸和位置,您确保它位于您的不可见视图之上,因此点击侦听器可以工作,然后您使用该视图进行点击听众,那个“面具视图”,如果你愿意的话,就像你会使用原来的一样。
    • 只要它工作正常,用户实际点击的内容并不重要。无知是幸福:)
    • Viswanath L 是的,如果这样会很好!但似乎看不见的视图是不可触摸的。 @DDsix 谢谢。我也想到了这种解决方法,但我想知道是否有更好的解决方案,或者至少是否可以触摸不可见的视图。所以谢谢你!
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多