2016-10-12 39 views
0

我试图用帆布画在Android的单行帆布的DrawLine是无形

我的类:

public class LineDrawer extends View { 

    public LineDrawer(Context context) { 
     super(context); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setStrokeWidth(10); 

     float left = 20; 
     float top = 20; 
     float right = 50; 
     float bottom = 100; 

     canvas.drawLine(left, top, right, bottom, paint); 

    } 
} 

我的主要活动:

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     LineDrawer lineDrawer = new LineDrawer(this); 

     setContentView(R.layout.activity_Main); 
    } 
} 

我不能找到问题出在哪里,我尝试在互联网上的所有解决方案,但没有发生任何事情,仍然是一个空白的活动..

我应该导入一些代码吗?

+0

'setContentView(lineDrawer)' – pskink

+0

如果我想为此活动使用xml文件,该怎么办? – Migra

+0

所以使用'setContentView(R.layout.activity_Main)' – pskink

回答

0

lineDrawer创建但不添加任何地方。仅仅创建一个视图是不够的,你需要将它添加到当前显示的视图中,并考虑和绘制。您有两种选择:

  • 将它添加到您的XML布局。您必须将以下构造函数添加到您的自定义视图。

    public LineDrawer(Context context, AttributeSet attrs) { super(context, attrs); }

  • 使用addView()。无论如何,鉴于你的例子有多简单,我将使用第一个(普通)方法。

作为附加评论,应该在视图初始化时创建Paint paint对象,这是一个代价高昂的操作。有关详细信息,请参阅original documentation

+0

当一个实例是从一个View的类继承中创建的,当编译器试图绘制视图时,它会去掉onDraw()方法,是不是正确? – Migra

+0

只需创建一个类是不够的,您需要将其添加到当前显示的视图中以进行考虑和绘制。另外,为了正确性,编译器不会画任何东西,就是操作系统。我编辑了答案。 –

+0

谢谢,但你能告诉我如何将这一行添加到我的视图? addContentView需要两个参数上下文和LayoutParms – Migra