2012-03-01 17 views
2

私は単純なクラスBoundedViewを持っています。Viewです。私は主にonTouchEventコールバック関数を混乱させるためにこれをやっています。Android - カスタムビューのボーダー

このビューの各インスタンスの周囲に、クラス自体から境界線を描く方法はありますか?そうでない場合は、これを実装する最も簡単な方法は何ですか?

実装:

public class BoundedView extends View 
{ 
    public String cellName = "no name"; 

    // constructors are here. 

    @Override 
    public void onDraw(Canvas canvas) 
    { 
    // maybe here? Right now it's invisible, used only for touch detection 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
    Intent i = new Intent(getContext(), TabCellDetails.class); 
    i.putExtra("cellName", this.cellName); 
    getContext().startActivity(i); 

    return false; 
    } 
} 

使用:

<com.lifecoderdev.android.drawing1.BoundedView 
     android:id="@+id/boundedView1" 
     android:layout_width="70dp" 
     android:layout_height="70dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginBottom="78dp" 
     android:layout_marginRight="96dp" 
     android:tag="Smooth Endoplasmic Reticulum"/> 

EDIT:Thisは近い私を取得します。

public void onDraw(Canvas canvas) 
{ 
    int[] colors = { 0xFF000000, 0xCC000000 }; 
    float[] radii = { 5, 5, 5, 5, 5, 5, 5, 5 }; 
    GradientDrawable drawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors); 
    drawable.setCornerRadii(radii); 
    drawable.setStroke(1, 0xFF000000); 
    this.setBackgroundDrawable(drawable); 
} 

をしかし、それは完全にブラックボックスに充填描画され、黒い境界線を持つ透明なものではありません。

EDIT 2:がそれを手に入れた:

Paint paint = new Paint(); 

paint.setColor(Color.RED); 
paint.setStrokeWidth(1.0f); 

canvas.drawRect(0, 0, getWidth(), 1.0f, paint); 
canvas.drawRect(0, 0, 1.0f, getHeight(), paint); 
canvas.drawRect(0, getHeight()-1.0f, getWidth(), getHeight(), paint); 
canvas.drawRect(getWidth()-1.0f, 0, getHeight(), getWidth(), paint); 

EDIT 3:アンドレアスとウォーレンのソリューションは非常に良くた:

@Override 
public void onDraw(Canvas canvas) 
{ 
    Paint paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setStrokeWidth(1.5f); 
    paint.setStyle(Style.STROKE); 

    canvas.drawRect(0, 0, getWidth(), getHeight(), paint); 
} 

答えて

5

はいを​​ごonDraw()の内側に適切な場所です。

canvas.drawRect(0, 0, getWidth(), getHeight(), paint); 

これでうまくいくはずです。 paint変数を正しく設定すると(ストロークの幅、色)、境界線が表示されます。

+0

'ペイントペイント=新しいペイント(); paint.setColor(Color.BLACK); paint.setStrokeWidth(1.0f); canvas.drawRect(0、0、getWidth()、getHeight()、paint); ' 私にはただ黒い四角形が与えられます。何か不足していますか?私はそれの背後にImageViewがあるので、透明であるために非境界線を必要とします。 – Josh

+3

「paint.setStyle(Style.STROKE)」を試してください。 – Andreas

+0

@アンドレアス:ありがとう、それは完璧に動作します! – Josh

関連する問題