2011-10-02 8 views
3

이미지 주위에 테두리를 그려야합니다. 하지만 ImageView 내부에서 이미지를 변환하고 크기를 조정하기 때문에 ImageView 자체에서 테두리를 정렬 할 수 없습니다 (ImageView 자체는 fill_parent/전체 화면을 채 웁니다). 두 번째 이미지 (테두리처럼 보임)를 추가하고 &을 테두리를 가져야하는 이미지와 같은 방법으로 축척하는 아이디어가 있지만이 방법으로는별로 도움이되지 않습니다. 그 목표에 도달하는 데 더 좋은 아이디어가 있습니까?ImageView에서 안드로이드 그리기 경계

감사합니다.

답변

17

이것을 구현하는 방법은 두 가지가 있습니다. 1) imageView에 패딩을 추가하고 배경색을 설정합니다. 당신은 당신이 (그릴하려는 행의 중간을주고 있습니다

@Override 
protected void dispatchDraw(Canvas canvas) 
{ 
borderDrawable.draw(canvas); 
super.dispatchDraw(canvas); 
} 
... 
public class BorderDrawable extends Drawable{ 

private Rect mBounds; 
private Paint mBorderPaint; 
public BorderDrawable(Rect bounds, int thickness, int color) 
{ 
    mBounds = bounds; 
    mBorderPaint = new Paint(); 
    mBorderPaint.setStrokeWidth(thickness); 
    mBorderPaint.setColor(color); 
} 
@Override 
public void draw(Canvas canvas){ 
//left border 
canvas.drawLine(mBounds.left - thickness/2,mBounds.top,mBounds.left - thickness/2,mBounds.bottom,mBorderPaint); 
//top border 
canvas.drawLine(mBounds.left, mBounds.top - thickness/2,mBounds.right, mBounds.top - thickness/2, mBorderPaint); 
//right border 
canvas.drawLine(mBounds.right + thickness/2, mBounds.top,mBounds.right + thickness/2,mBounds.bottom, mBorderPaint); 
//bottom border 
canvas.drawLine(mBounds.left, mBounds.bottom + thickness/2, mBounds.right, mBounds.bottom + thickness/2, mBorderPaint); 
} 

} 

참고 :

final ImageView imageView = new ImageView(context); 
imageView.setPadding(2*border,2*border,0,0); 
final ViewGroup.MarginLayoutParams params = new ViewGroup.MarginLayoutParams(width,height); 
params.leftMargin = marginYouWouldSet + border; 
params.topMargin = marginYouWouldSet + border; 
imageView.setBackgroundDrawable(drawable); 
imageView.setBackgroundColor(borderColor); 
addView(imageView, params); 

2) 또 다른 옵션은 뷰의 그리기 방법을 무시하고이 국경을 그릴 것입니다!) 또한 실행하지 않았거나 컴파일하지 않았으므로 올바른지 100 % 확신 할 수는 없지만 다음과 같은 방법이 있습니다. 사각형 경계는 뷰의 경계 사각형이어야합니다. - (0,0, width, height).

+1

합니다. 내가 이미지를 드레싱 할 때 테두리가 그 좌표에 남습니다. border-bounds (ImageMatrix 업데이트와 병행)가 업데이트되지만 작동하지 않는 CustomView.setBorder 메서드를 추가했습니다. 나는 무언가를 불러야합니까? 아. 뭔가 잘못 된 것처럼 보입니다. 이제 그 일. – andineupert

0

또는 어떤 종류의 레이아웃에 이미지 뷰를 넣어 그냥 패딩 설정 : 내가 두 번째 옵션을 사용

static class BorderView extends FrameLayout 
    { 
     public ImageView imageView; 

     public BorderView(Context context) 
     { 
      super(context); 

      setLayoutParams(//wrap content) 
      imageView = new ImageView(context);//set image and so forth 
      addView(imageView); 
     } 

     public void addSelectionBorder() 
     { 
      int border = 8; 
      setPadding(border,border,border,border); 
      setBackgroundColor(Color.BLUE); 
     } 

     public void removeSelectionBorder() 
     { 
      int border = 0; 
      setPadding(border,border,border,border); 
      setBackgroundColor(Color.BLACK); 
     } 
    } 
관련 문제