gpt4 book ai didi

android - 如何使用 onDraw 指定自定义 View 的高度/宽度?

转载 作者:行者123 更新时间:2023-11-29 21:21:11 25 4
gpt4 key购买 nike

我正在实现自定义 View 。当用户触摸 FrameLayout 内托管的 ImageView 中的某个点时,我想向 FrameLayout 添加一堆圆圈。现在,我在半径为 20 的 onDraw 方法中绘图。但是,当我将它放入 FrameLayout 时,它只显示一个小角。我怎样才能告诉自定义 View 它的宽度/高度也应该为 20?这是我应该在自定义 View 中执行的操作,还是在实例化自定义 View 后调用 addView 的 Activity 中执行的操作?

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 );
}
}

Activity 代码基本上是这样的(从具有 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)

关于android - 如何使用 onDraw 指定自定义 View 的高度/宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com