解决方案 »

  1.   

    一般情况下 如果你的父类布局是 AbsoluteLayout    v.layout 方法会调用 onLayout()方法   AbsoluteLayout 有实现这个方法。其他情况 需要自己手动绘制。也就是 你需要自己继承个父类布局, 
    //参考下面做法
     
    @Override
    protected void dispatchDraw(Canvas canvas) {
    super.dispatchDraw(canvas); if (v != null && v.visible()) {
    drawChild(canvas, v, getDrawingTime());
    } }这样 才会在界面上绘制出 你想要的结果
    (未实测, 仅供参考。)
      

  2.   

    现在我是这样的情况,
    布局是releativelayout   r1 , r1 里又一个relativelayout  r2。
    代码里我自定一个view Myview,   r2.addview(Myview) .
    给r1 设置触摸事件, 触摸到的地方myview.layout(); 
    希望这样可以使Myview 移动,可是没有效果。 
      

  3.   

      r1.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //do layout here
                    
                   //this is important to return true, for you need to get MOVE MotionEvent 
                    return true;
                }
            });原因 你要去理解下 点击事件的传递流程。
    所有该类的方法 返回值 都很重要。
      

  4.   

    //简单模拟个实现, 你参考下。
    public class MyActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);        RelativeLayout r1=new RelativeLayout(this);     final   RelativeLayout r2=new RelativeLayout(this);
            r1.addView(r2,new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));        final TextView button=new TextView(this);        button.setText("我是谁");
            r2.addView(button);        r1.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                  //  if(event.getAction()==MotionEvent.ACTION_MOVE) {
                        button.layout((int) event.getX(), (int) event.getY(), (int) (button.getWidth() + event.getX()), (int) (button.getHeight() + event.getY()));
                  //  }
                    return false;
                }
            });
            setContentView(r1);
        }
    }