Android CustomView集成在Fragment中

Android CustomView集成在Fragment中,android,android-layout,Android,Android Layout,我想创建一个绘图应用程序。为此,我创建了一个自定义DrawingView。要在绘图期间启用其他选项,CustomView应包含在特定区域的activity_main.xml中 public class MainActivity extends AppCompatActivity { DrawingView dv ; private Paint mPaint; @Override protected void onCreate(Bundle savedInstanceState) {

我想创建一个绘图应用程序。为此,我创建了一个自定义DrawingView。要在绘图期间启用其他选项,CustomView应包含在特定区域的activity_main.xml中

public class MainActivity extends AppCompatActivity {

DrawingView dv ;
private Paint mPaint;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    mPaint.setColor(Color.GREEN);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeJoin(Paint.Join.ROUND);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mPaint.setStrokeWidth(12);

    dv = new DrawingView(this, mPaint);
    setContentView(R.layout.activity_main);
} 
}


原因:java.lang.NoSuchMethodException:[类android.content.Context,接口android.util.AttributeSet]

您没有声明足够的构造函数

通常自定义视图应该至少有2个构造函数。一个接受
上下文
,另一个接受
上下文
属性集

public class DravingView extends View {
    public DravingView(final Context context) {
        super(context);
    }

    public DravingView(final Context context, final AttributeSet attrs) {
        super(context, attrs);
    }
}
为什么我需要这个构造函数?


首先解析
xml
,然后创建相应的类对象。解析布局
xml
文件后,框架将尝试使用
xml
中的应用参数为您创建
DrawingView
对象。这些参数正在通过
AttributeSet
传递。但只要它在
DrawingView
类中找不到这样的构造函数,它就会崩溃。

将您的
DrawingView
构造函数更改为此

public DrawingView(Context c, AttributeSet attr) {
    super(c, attr);
    context=c;
}
将此方法添加到
DrawingView
类中

public void setPaint(Paint pPaint) {
        mPaint = pPaint;
    }
在xml中向工程视图添加ID

然后像这样初始化drawingView
dv=(DrawingView)findViewById(R.id.DrawingView)

然后在活动中这样设置您的油漆
dv.setPaint(mPaint)

将此添加到父线性布局标签中=xmlns:custom=”“感谢您的回答!但如果我尝试这样做,它会被称为java.lang.NullPointerException:尝试在一个空对象引用id上调用虚拟方法'void de.sentoon.touchtTesterv4.DrawingView.setPaint(android.graphics.Paint)',您首先初始化
DrawingView
如下
dv=(DrawingView)findViewById(R.id.DrawingView)然后调用set paint方法。如果是这样,您是否在xml中将id添加到drawingView中,并且这是指向您的
drawingView
de.sentoon.touchtTesterv4.drawingView的路径,因为这也可能是问题所在。。。如果您仍然有问题,请发布完整的
活动
绘图视图
和布局文件谢谢!如果我添加了第二个构造器,并在构造器中设置了绘画默认值,它就工作了!好的作为社区的新成员,当你收到问题的答案时,你应该将其标记为已解决。
public void setPaint(Paint pPaint) {
        mPaint = pPaint;
    }