我正在实现自定义视图。我想在用户触摸FrameLayout内部托管的ImageView中的点时向FrameLayout添加一堆圆圈。现在,我正在以20的半径绘制onDraw方法。但是,当我将其放入FrameLayout时,它只是显示了一个小角。如何告诉自定义视图其宽度/高度也应该为20?我应该在自定义视图中还是在实例化自定义视图后调用addView的活动中执行此操作?
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 / Y坐标的onTouch处理程序中调用):
MyCircle circle;
circle = new MyCircle(this);
circle.setX( x );
circle.setY( y );
FrameLayout root = (FrameLayout)findViewById(R.id.image_review_frame);
root.addView( circle );
覆盖onMeasure()
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
float density = context.getResources().getDisplayMetrics().density;
setMeasuredDimension (RADIUS * density,RADIUS * density);
return;
}
代码re:density是将dp转换为像素(例如xhdpi显示器的密度为2.0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句