2013-12-20 70 views
1

我正在實施自定義視圖。當用戶觸碰FrameLayout中託管的ImageView中的一個點時,我想將一堆圓圈添加到FrameLayout。現在,我正在用半徑爲20的onDraw方法繪製內容。但是,當我將它放入FrameLayout中時,它只顯示一個小角落。我如何告訴自定義視圖它應該有20的寬度/高度?這是我應該在我的自定義視圖中執行的事情,還是在我實例化自定義視圖後調用addView的活動中?如何使用onDraw指定自定義視圖的高度/寬度?

public class MyCircle extends View { 

Paint paint; 
private static final int RADIUS = 20; 

public MyCircle(Context context) { 
    super(context); 
    paint = new Paint(); 
    paint.setColor(Color.WHITE); 
    setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
//  LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(RADIUS * 2 , RADIUS * 2); 
//  setLayoutParams(layoutParams); 
} 

@Override 
public void onDraw(Canvas canvas) { 
    canvas.drawCircle(0, 0, RADIUS, paint); 
} 
} 

活性代碼基本上是這樣(從與X中的onTouch處理程序內調用/ Y座標):

MyCircle circle; 
    circle = new MyCircle(this); 
    circle.setX(x); 
    circle.setY(y); 
    FrameLayout root = (FrameLayout)findViewById(R.id.image_review_frame); 
    root.addView(circle); 
+1

您不知道。請閱讀文檔並在developer.android.com上按照創建自定義視圖的教程進行操作。你想要onMeasure()和其他幾種方法。 – Simon

回答

2

覆蓋onMeasure()

@Override 
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) 
{ 
float density = context.getResources().getDisplayMetrics().density; 
setMeasuredDimension (RADIUS * density,RADIUS * density); 
return; 
} 

代碼重新:密度是將dp轉換爲像素(例如,xhdpi顯示器將具有密度2.0)

相關問題