2

タッチしたポイント (座標 28,87 など) に (シェイプ リソースを使用して) 四角形を描画する方法。このような形状を作成しました。

android:shape="rectangle" >


<solid 
    android:color="@color/transparent"/>
<stroke

    android:width="3dp"
    android:color="@color/green" />

画像のタッチポイントに描画したいこの長方形。

4

2 に答える 2

3

ビューの onDraw() メソッドで、ビューにシェイプを描画できます。ビュー キャンバスに描画可能なシェイプを描画する方法はありません。
また、長方形を描画するためにシェイプ ドローアブルを使用する必要はありません。canvas.drawRect() メソッドを使用して長方形を描画できます。このためのコードは次のとおりです。

public class MyView extends View{

float x,y;
Bitmap bmp;
Paint mPaint;
float width = 100.0f;
float height = 50.0f;

boolean touched = false;

public MyView (Context context)
{
    super(context);
    x = y = 0;
    mPaint = new Paint();
    mPaint.setColor(Color.BLUE);
    mPaint.setStyle(Style.STROKE);
}

@Override
protected void onDraw (Canvas canvas)
{
    canvas.drawColor(Color.WHITE);
    if(touched)
    {
        canvas.drawRect(x, y, x+width, y+height, mPaint);

    }   
}

@Override
public boolean onTouchEvent (MotionEvent event)
{
    touched = true;
    //getting the touched x and y position
    x = event.getX();
    y = event.getY();
    invalidate();
    return true;
}

}

于 2012-09-03T12:18:12.913 に答える
2

@kam 'ソリューションには更新が必要だと思います。コンストラクターにあったものはすべて init() メソッドにある必要があり、コンストラクターは 3 回上書きする必要があります。

public class MyView extends View {

private float xDown = 0,yDown = 0, xUp = 0, yUp = 0;

Paint mPaint;

boolean touched = false;
public MyView(Context context) {
    super(context);
    init(context);
}

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

public MyView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(context);
}

private void init(Context context) {
    mPaint = new Paint();
    mPaint.setColor(Color.BLUE);
    mPaint.setStyle(Paint.Style.STROKE);
}

@Override
protected void onDraw (Canvas canvas)  {
    canvas.drawColor(Color.TRANSPARENT);
    if(touched) {
        canvas.drawRect(xDown, yDown, xUp, yUp, mPaint);

    }
}

@Override
public boolean onTouchEvent (MotionEvent event) {
    switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:
            xDown = event.getX();
            yDown = event.getY();

            xUp = 0;
            yUp = 0;
            break;
        case MotionEvent.ACTION_MOVE:
            xUp = event.getX();
            yUp = event.getY();
            touched = true;
            break;
        case MotionEvent.ACTION_UP:
            xUp = event.getX();
            yUp = event.getY();
            touched = true;
            break;
    }
    invalidate();
    return true;
}

}

于 2016-11-03T11:07:25.143 に答える