2010-06-03 6 views
11

Android에서 2D 그래픽을 얻으려고했습니다. 내가 정의 드로어 블을 구현하고 내가 얻기 위해 노력하고Android에서 사용자 정의 된 드로어 블 구현

class myDrawable extends Drawable { 

    private static final String TAG = myDrawable.class.getSimpleName(); 
    private ColorFilter cf; 
    @Override 
    public void draw(Canvas canvas) { 


    //First you define a colour for the outline of your rectangle 

    Paint rectanglePaint = new Paint(); 
    rectanglePaint.setARGB(255, 255, 0, 0); 
    rectanglePaint.setStrokeWidth(2); 
    rectanglePaint.setStyle(Style.FILL); 

    //Then create yourself a Rectangle 
    RectF rectangle = new RectF(15.0f, 50.0f, 55.0f, 75.0f); //in pixels 


    Log.d(TAG,"On Draw method"); 
    // TODO Auto-generated method stub 
    Paint paintHandl = new Paint(); 
    // paintHandl.setColor(0xaabbcc); 
    paintHandl.setARGB(125, 234, 213, 34); 
    RectF rectObj = new RectF(5,5,25,25); 
    canvas.drawRoundRect(rectangle, 0.5f, 0.5f, rectanglePaint); 

    } 

    @Override 
    public int getOpacity() { 
    // TODO Auto-generated method stub 
    return 100; 
    } 

    @Override 
    public void setAlpha(int alpha) { 
    // TODO Auto-generated method stub 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
    // TODO Auto-generated method stub 
    this.cf = cf; 
    } 
} 

아래에 언급 한 바와 같이

나는 안드로이드 당김에서 확장하여 사용자 정의 그릴 수를 정의 내 활동에서 그것을 보여주고 싶은 예를 들어 이 표시 내 활동 (아래 그림 참조)

그러나 내가 앱을 실행할 때 활동에 직사각형이 보이지 않으므로 누구나 나를 도울 수 있습니까? 어디서 잘못 가고 있습니까?

답변

11

getOpacity() 방법에 문제가 있습니다. 100은 유효한 값이 아닙니다. PixelFormat 값을 사용해야합니다. 또한 생성자에 RectFPaint을 만든 다음 draw()의 값을 조정하여 가비지 수집이 필요한 개체를 너무 많이 만들지 않아야합니다. 이와 같이 :

public class Square extends Drawable 
{ 
    private final Paint mPaint; 
    private final RectF mRect; 

    public Square() 
    { 
     mPaint = new Paint(); 
     mRect = new RectF(); 
    } 

    @Override 
    public void draw(Canvas canvas) 
    { 
     // Set the correct values in the Paint 
     mPaint.setARGB(255, 255, 0, 0); 
     mPaint.setStrokeWidth(2); 
     mPaint.setStyle(Style.FILL); 

     // Adjust the rect 
     mRect.left = 15.0f; 
     mRect.top = 50.0f; 
     mRect.right = 55.0f; 
     mRect.bottom = 75.0f; 

     // Draw it 
     canvas.drawRoundRect(mRect, 0.5f, 0.5f, mPaint); 
    } 

    @Override 
    public int getOpacity() 
    { 
     return PixelFormat.OPAQUE; 
    } 

    @Override 
    public void setAlpha(int arg0) 
    { 
    } 

    @Override 
    public void setColorFilter(ColorFilter arg0) 
    { 
    } 
} 
+0

변경 케이시에 의해 언급하지만, 여전히 나는 내 견해에 그려진 어떤 유효한 재료도 볼 수 없다. – Girish

+0

다른 문제는'ImageView'를 결코'LinearLayout'에 추가하지 않는 것 같습니다. 당신은'layObj.addView (imageView);'를 onCreate()의 끝 부분에 추가해야합니다. – CaseyB

+0

선형 레이아웃에 imageView를 추가했는데, 기본적으로 경계 설정에 문제가 있습니다. xml에서 너비와 높이를 하드 코딩했습니다. 이미지보기 중 이제는 나타나기 때문에 내 setBounds의 일부 문제는 무엇입니까? – Girish

0

getIntrinsicWidth() 및 getIntrinsicHeight()와 같은 다른 재정의를 구현해야 할 수도 있습니다. 한 가지 방법은 layout_width 및 layout_height를 일정한 값으로 설정하는 것입니다 (layout_width = "42dip"layout_height = "42dip"또는 Java 레이아웃을 사용하는 경우 layoutParams를 일부 값으로 설정). 일부 뷰 유형은 다른 것보다 getIntrinsic *을 구현하지 않으므로 처리하십시오. 직선도 포함

특정 너비 또는 높이가없는 경우 -1을 반환 해 볼 수 있습니다. 문제가 지금까지 해결되었다 경우

하드

알 수 있습니다,하지만 난 구글이 자신을 사용자 정의 그리기를 만들기의 세부 사항을 기억하는 데 도움이 노력을 통해 여기 있어요, 게다가 난 사람들이 방지하려면 : http://xkcd.com/979/ 내가 한

관련 문제