0

ImageView を拡張するカスタム ビューがあります。onDraw() が呼び出されることはありません。

複雑なことは何もありません:

public class NVGlobeView extends ImageView{

私は3つのコンストラクターをすべて持っています:

 public NVGlobeView(Context context) {
        this(context, null);
    }

    public NVGlobeView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public NVGlobeView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        mContext = context;

onMeasure をオーバーライドし、固定サイズを強制して、ビューの次元がゼロにならないようにしました。onMeasure() が呼び出されるため、ビューがレイアウトに追加されていることがわかり、サイズが正しく設定されていることを確認するためにステップスルーできます。また、AVD の階層ビューアーで検証しました。

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight());

        DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
        setMeasuredDimension(dm.widthPixels-50,dm.heightPixels-100);
}

最後に、 onDraw()

@Override
protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

}

スーパーコールにブレークポイントを設定しましたが、到達しません。

関連するアクティビティ コードは次のとおりです。

    setContentView(R.layout.nvglobeview);

    NVGlobeView globeView = (NVGlobeView)findViewById(R.id.globeView);
    globeView.invalidate();

私が見逃したアイデアはありますか?

4

1 に答える 1

0

おそらく、あなたが返す測定値は、ビューが目に見えるスペースをとらないようなものです。

于 2013-01-25T17:59:13.660 に答える