0

ボタンのクリックで onDraw メソッドを呼び出そうとしています。ボタンは一度だけ更新され、onDraw メソッドも呼び出されます。しかし、ラインの位置は変わりません。

私はこのカスタムビューを持っています

public LineSeekbar(Context context) {
    super(context);
    this.setWillNotDraw(false);
    setNewX(130);       
}

@Override
protected void onDraw(Canvas canvas) {  
    super.onDraw(canvas);
    Log.e("GRAPH","draw");      
    paint = new Paint(); 
    paint.setARGB(225, 215, 10, 20); 
    paint.setStrokeWidth(2); 
    paint.setStyle(Style.FILL); 
    canvas.drawLine(130,900,getNewX(),100, paint);
    setNewX(getNewX()+15);
}

アクティビティクラスからこれを呼び出す

final Bitmap mBackgroundImage = Bitmap.createBitmap(500,500, Bitmap.Config.RGB_565);
    cv =new Canvas(mBackgroundImage);
    LineView = new LineSeekbar(LineActivity.this);
    LineView.setLayoutParams(new LayoutParams(500,500));
    LineView.onMeasure(500,500);
    LineView.invalidate();
    LineView.draw(cv);
    //  LineView = null;
    ImageView mImageView = new ImageView(this);
    mImageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,    LayoutParams.FILL_PARENT));
    mImageView.setBackgroundColor(android.R.color.white);
    mImageView.setImageBitmap( mBackgroundImage );
    LinearLayout ll =(LinearLayout) findViewById(R.id.linearLayout1);
    ll.addView(mImageView);

    Button inc = (Button) findViewById(R.id.increase);
    inc.setOnClickListener(new OnClickListener() {          
        @Override
        public void onClick(View v) {
            LineView.invalidate();
            LineView.draw(cv);              
        }
    });
4

3 に答える 3

1

クラスではないので、小文字でイ​​ンスタンスを呼び出す必要があります: LineView の代わりに lineView 。

あなたは別のスレッド(UI)からそれを呼び出しているので、あなたは言うべきです

LineView.postInvalidate();

初めて LineView インスタンスを作成すると、onDraw が単独で実行され、最初の行が表示されます。

LineView.draw(cv); が何であるかは明確ではありません。線を引く直前に onDraw で背景画像を描画できます。カスタム ビューで onSizeChange メソッドを使用して、実際の寸法を見つけ、ビットマップのサイズを変更できます...

onDraw で行を挿入します

Log.e("LineView", Integer.toString(getNewX()));

次に、DDMS - LogCat で、ボタンを押したときに出力を監視します。

于 2012-01-05T11:24:52.503 に答える
0

それを解決しました、私はカスタムビューをxmlレイアウトに配置しました、それはうまく機能しています。

于 2012-01-06T04:29:22.400 に答える
0

これを試して:

必要な LineView クラスのオブジェクトを作成していません。インスタンスには小文字を使用する必要があります。

final Bitmap mBackgroundImage = Bitmap.createBitmap(500,500, Bitmap.Config.RGB_565);
cv =new Canvas(mBackgroundImage);
LineView lineView = new LineSeekbar(LineActivity.this);
lineView.setLayoutParams(new LayoutParams(500,500));
lineView.onMeasure(500,500);
lineView.invalidate();
lineView.draw(cv);
//  LineView = null;
ImageView mImageView = new ImageView(this);
mImageView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,    LayoutParams.FILL_PARENT));
mImageView.setBackgroundColor(android.R.color.white);
mImageView.setImageBitmap( mBackgroundImage );
LinearLayout ll =(LinearLayout) findViewById(R.id.linearLayout1);
ll.addView(mImageView);

Button inc = (Button) findViewById(R.id.increase);
inc.setOnClickListener(new OnClickListener() {          
    @Override
    public void onClick(View v) {
        lineView.invalidate();
        lineView.draw(cv);              
    }
});
于 2012-01-05T11:28:52.760 に答える