【问题标题】:Disable touch event programmatically in viewgroup在视图组中以编程方式禁用触摸事件
【发布时间】:2013-10-31 08:28:21
【问题描述】:

我有一个应用程序,在其中我将一些图像设置为固定角度。在 270 到 90 角度之间的角度,我使用不可见隐藏图像。但它的触摸事件仍然有效。显然因为图像在那里。我想以编程方式在这些角度禁用触摸事件。任何人都可以指导我如何实现这一点。

这是我在 onLayout 中的代码-

float angleDelay = 360 / getChildCount();
    if (!childRotate) {

        for (Integer i = 0; i < childCount; i++) {
            final Left_Unit textName = (Left_Unit) getChildAt(i);

            if (textName.getVisibility() == GONE) {
                continue;
            }

            if (angle > 360) {
                angle -= 360;
            } else {
                if (angle < 0) {
                    angle += 360;
                }
            }
            textName.setAngle(angle);
            textName.setPosition(i);
            if (position == name.size()) {
                position = 0;
            }
            if (position < childCount) {
                // textName.setVisibility(View.VISIBLE);

                textName.setTextname(name.get(position));
                textName.setText(name.get(position));
                position++;

            }
            if (angle <= 270 && angle >= 90) {
                textName.setVisibility(View.VISIBLE);
            }

效果很好。

为了旋转,我调用了这个方法

    for (Integer i = 0; i < childCount; i++) {

        if (angle > 360) {
            angle -= 360;
        } else {
            if (angle < 0) {
                angle += 360;
            }
        }
        final Left_Unit child = (Left_Unit) getChildAt(i);
        if (child.getVisibility() == GONE) {
            continue;
        }
        if (position == name.size()) {
            position = 0;
        }
        if (angle > 85 && angle < 90) {
            // child.setVisibility(View.VISIBLE);

            child.setTextname(name.get(position));
            child.setText(name.get(position));
            position++;
        }
        if (angle <= 270 && angle >= 90) {
            child.setVisibility(View.VISIBLE);
        } else {
            child.setVisibility(View.GONE);//when i use View.INVISIBLE it works fine & images become visible after rotation but with gone it's not visible again
        }

这是我的xml

                <com.example.converter.view.Left_Unit
                    android:id="@+id/text1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="a1"
                    android:textColor="#ffffff"
                    android:visibility="invisible"
                    left:textname="text1" />

【问题讨论】:

  • 你用什么语句来隐藏图片
  • if (angle >= 270 && angle

标签: android touch-event viewgroup


【解决方案1】:

使用 if (angle >= 270 && angle

【讨论】:

  • 问题在于 ontouch 而不是可见性。
  • 我也面临同样的问题,但如果你用 view.INVISIBLE 隐藏你的图像,它会隐藏图像,但仍处于触摸模式,但如果你使用 View.Gone,它会隐藏图像并禁用在触摸模式下。它解决了我的问题
  • 实际上在 xml 中,我将可见性设置为 invisible.so 当我使用 if (angle >= 270 && angle = 270 && angle
  • 我认为您的代码存在其他问题,因为我多次使用 View.Gone 和 View.Visible 但从未遇到任何问题,因此分享您的代码将帮助我理解问题
  • Ok glb 再做一件事删除 android:visibility="invisible" 并在要隐藏图像的类文件中使用 setvisibility View.Gone。
【解决方案2】:

首先,您需要以编程方式检查视图是否可见。使用此代码检查可见性

image.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
           if (v.getVisibility() == View.VISIBLE) {
                         // Its visible
                        } else {
                           do nothing
                           }    

        }
    });

【讨论】:

  • 是的,我知道这就是我想知道的事情。如何在可见性消失时禁用 ontouch。
  • 这就是我写什么都不做的原因,,,,让其他情况为空
【解决方案3】:
if(angle >=270 && angle <=90){ image.setEnabled(false)} //I guess when you add the image

或者如果由于某种原因无法正常工作,请检查点击:

image.setOnClickListener(new View.OnClickListener(){
  @Override
  public void onClick(View v){
    if(!(angle >=270 && angle <=90)){
      //handle click
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 2014-02-07
    • 2011-07-22
    • 1970-01-01
    • 2011-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多