Android CustomView集成在Fragment中
我想创建一个绘图应用程序。为此,我创建了一个自定义DrawingView。要在绘图期间启用其他选项,CustomView应包含在特定区域的activity_main.xml中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) {
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;
}