2013-12-20 54 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)

相关问题