2012-03-01 4 views
2

BoundedViewView까지 확장되는 간단한 클래스입니다. 주로 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"/> 

편집 :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); 
} 

을하지만, 완전히 블랙 박스에 가득를 끌고있다, 검은 색 테두리가있는 투명한 창이 아닙니다.

편집 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); 

편집 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

@ Andreas : 감사합니다. 완벽하게 작동합니다! – Josh

관련 문제