【问题标题】:Getting a reference to the parent ViewGroup获取对父 ViewGroup 的引用
【发布时间】:2012-01-09 04:05:07
【问题描述】:

我通过将形状和句柄作为单独的视图添加到 ViewGroup 来创建可缩放的形状。单击处理程序后,如何获取对 ViewGroup 的引用,以便可以缩放所有内容? handle.getParent() 返回空值。我的 ViewGroup 是以编程方式创建的。

public class ShapeView extends ViewGroup {

    private SelectorView mSelectorView;

     public ShapeView (Context context) {
          super(context);
          RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(200, 200);
          this.setLayoutParams(p);
          mSelectorView = new SelectorView(context);
          this.addView(mSelectorView);
    }
}


public class SelectorView extends View {

public RectangleDrawable mRectangleDrawable;

    public SelectorView (Context context) {
          super(context);
          Log.v(TAG, "constructor");
          mRectangleDrawable = new RectangleDrawable();
          RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(20, 20);
          this.setLayoutParams(p);
    }

    @Override
    protected void onDraw(Canvas canvas) {  
          super.onDraw(canvas);
          mRectangleDrawable.draw(canvas); 
    }


    public boolean onTouchEvent(MotionEvent event) {

          switch (event.getAction()) {
             case MotionEvent.ACTION_DOWN: {
               ViewGroup parentView = (ViewGroup)this.getParent();
               parentView.setX(100);
               parentView.setY(100);
               break;
              }
           }
           return true; 
    }

}

【问题讨论】:

  • 请发布您用于添加句柄和响应点击的代码。
  • 请添加处理点击的代码。
  • 我已经更新了代码。谢谢。

标签: android shapes viewgroup


【解决方案1】:

请使用 SelectorView.this.getParent() 而不是 this.getParent()

public class SelectorView extends View {

public RectangleDrawable mRectangleDrawable;

public SelectorView (Context context) {
      super(context);
      Log.v(TAG, "constructor");
      mRectangleDrawable = new RectangleDrawable();
      RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(20, 20);
      this.setLayoutParams(p);
}

@Override
protected void onDraw(Canvas canvas) {  
      super.onDraw(canvas);
      mRectangleDrawable.draw(canvas); 
}


public boolean onTouchEvent(MotionEvent event) {

      switch (event.getAction()) {
         case MotionEvent.ACTION_DOWN: {
           ViewGroup parentView = (ViewGroup)SelectorView.this.getParent();
           parentView.setX(100);
           parentView.setY(100);
           break;
          }
       }
       return true; 
}

}

【讨论】:

    猜你喜欢
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多