我正在尝试为android制作一个简单的绘图程序.
我有一个自定义View类来处理绘图.当我打电话了getWidth,并getHeightmetheds,我得到一个零.
但是,绘图工作正常,我在宽度和高度硬编码,所以它的工作原理.它为什么这样做?
我的View类
public class cDrawing extends View{
    char BitMap[];
    static final short WIDTH=160;
    static final short HEIGHT=440;
    static final char EMPTY=' ';
    int mWidthSize;
    int mHeightSize;
    static final char RED ='R';
    int y;
    public cDrawing(Context context) {
        super(context);
        y=3;
        // set up our bitmap
        BitMap=new char[WIDTH*HEIGHT];
        for(int i=0; i<WIDTH*HEIGHT; i++)
                BitMap[i]=EMPTY;
        // returns zero why???????
        int h=getHeight();
        h=400;
        int w=getWidth();
        w=320;
        mWidthSize=w/WIDTH;
        mHeightSize=h/HEIGHT;
        // TODO Auto-generated constructor stub
    }
Activity类
public class cCanves extends Activity  implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.canves);
        cDrawing board=new cDrawing(this);
        LinearLayout layout = (LinearLayout)findViewById(R.id.parent2);
        layout.addView(board);
        // set up buttons
        View mEraser = findViewById(R.id.buteraser);
        mEraser.setOnClickListener(this);
        View mBlack = findViewById(R.id.butblack);
        mBlack.setOnClickListener(this);
        View mWhite = findViewById(R.id.butwhite);
        mWhite.setOnClickListener(this);
        View mRed = findViewById(R.id.butred);
        mRed.setOnClickListener(this);
    } // end function
    public void onClick(View v) {
        Intent i;
        switch(v.getId())
        {
        case R.id.buteraser:
            break;
        case R.id.butblack:
            break;
        case R.id.butwhite:
            break;
        case R.id.butred:
            break;
        } // end switch
    }   // function
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/parent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:orientation="vertical"
  android:layout_height="fill_parent">
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:orientation="horizontal"
      android:layout_height="wrap_content">
    <ImageButton android:id="@+id/buteraser"
      android:src="@drawable/icon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
    <ImageButton android:id="@+id/butblack"
      android:src="@drawable/icon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
    <ImageButton android:id="@+id/butwhite"
      android:src="@drawable/icon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
    <ImageButton android:id="@+id/butred"
      android:src="@drawable/icon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
    </LinearLayout>
    <LinearLayout android:id="@+id/parent2"
      android:layout_width="fill_parent"
      android:orientation="vertical"
      android:layout_height="fill_parent">
    </LinearLayout>
</LinearLayout>
mah*_*mah 19
在视图实际呈现到屏幕之前,不会定义宽度和高度.
使用protected abstract void onLayout(boolean changed,int l,int t,int r,int b)(您在活动中覆盖)以了解大小何时准备就绪.
小智 6
补充Mah的答案,我发现你可以从参数中获取值,如下面的代码:
ImageView imageProcess = (ImageView) li.inflate(
    R.layout.andamento_sinistro_imageprocess, centerLayout, false);
imageProcess.setBackgroundResource(
    (isActive)?(R.drawable.shape_processon):(R.drawable.shape_processoff));
RelativeLayout.LayoutParams imageProcessParams = 
    (RelativeLayout.LayoutParams)imageProcess.getLayoutParams();
imageProcessParams.leftMargin = 
    (int) (centerPosition - 0.5*imageProcessParams.width);
imageProcessParams.addRule(RelativeLayout.CENTER_VERTICAL);
centerLayout.addView(imageProcess);
这里真正的问题是LayoutParams的使用,它具有尚未由元素处理的规则.
| 归档时间: | 
 | 
| 查看次数: | 27638 次 | 
| 最近记录: |