2012-07-04 54 views
1

我尝试将我的自定义视图与EditView叠加在一起,获得了不同的成功。在自定义视图上叠加编辑视图

的解决方案需要结合我的自定义视图不会被画布上绘制时所执行的各种计算的事实。计算,如锻炼中心X和Y cordinates,帆布等

这些计算的尺寸将被用来在屏幕上定位EditText

到目前为止,我已经想通了,一个RelativeLayout是在考虑到叠加的路要走。

最好的解决方案至今(这是不理想的)是创建一个自定义RelativeLayout,见下图:

public class MyCustomRL extends RelativeLayout { 

    public MyCustomRL(Context context) { 
     super(context); 
     initView(context); 
    } 

    public MyCustomRL(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initView(context); 
    } 

    public MyCustomRL(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initView(context); 
    } 

    protected void initView(Context context){ 

     LayoutInflater inflater = LayoutInflater.from(context); 
     SeekBar_Speedometer v_speedometer = (SeekBar_Speedometer) inflater.inflate(R.layout.rl_custom_speedometer, this, false); 

     addView(v_speedometer); 

     RelativeLayout rl_comment = (RelativeLayout) inflater.inflate(R.layout.rl_edittext_comment, this, false); 

     EditText edit = (EditText) rl_comment.findViewById(R.id.edittext_comment); 
     edit.setText("Text altered at runtime"); 

     rl_comment.setX(112); 
     rl_comment.setY(117); 
     //Log.v("WHATEVER","X: "+v_speedometer.centerX); // = 0 
     //rl_comment.setX(v_speedometer.centerX); 
     //rl_comment.setY(v_speedometer.centerY); 

     addView(rl_comment); 
    } 
} 

这本质上工作时,EditText定位在那些静止坐标。不过,我希望EditText被放置在v_speedometer.centerXv_speedometer.centerY坐标处,但它们为0,因为v_speedometer视图尚未绘制出来!

我应该怎么做?

回答

0

如果您没有找到还没有任何解决方案,你可以写,这将作为您的 里程表hasDrawn监听器的接口。这意味着只要您的速度计将被绘制,它就会向实现您的EditText的类发布通知,然后再次在您的CustomView或UI中设置它们的坐标。