2015-06-16 66 views
3

目前我正在开发一个应用程序,其中线将被绘制从一个点到另一个按钮点击位图。 这是我在MainActivity.java代码:安卓绘制线与2分

public class MainActivity extends Activity { 
    LineView lineview; 
    Button button; 

    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //lineview = (LineView)findViewById (R.id.lineView1); 
    button = (Button)findViewById(R.id.btnCapture); 
    //lineview.setVisibility(View.INVISIBLE); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // lineview.setVisibility(View.VISIBLE); 
     } 
    }); 


} 
} 

LineView.java - 类画线

public class LineView extends View { 
Paint paint = new Paint(); 

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

public LineView(Context context, AttributeSet attrs, int defstyle) { 
super(context, attrs, defstyle); 
    } 


public LineView(Context context) { 
super(context); 
paint.setColor(Color.BLACK); 
} 

@Override 
public void onDraw(Canvas canvas) { 
    canvas.drawLine(0, 0, 20, 20, paint); 
} 

} 

现在,它吸引了来自使用定义坐标起点线。我想要使​​用在主要活动中声明的2点坐标绘制线条。那个函数应该在onClick之后工作。 在此先感谢。

+0

而不是'app.draw.line.LineView'使用'ImageView',然后用'ImageView.setBitmap(位图)''那里是bitmap'位图你在哪里画线。 – torque203

+0

我绑在位图内部画线,但只有黑屏。再加上现在我专注于与第2个答案的帮助下解决了我的问题,但有一点进步 –

+0

使用[Canvas.drawColor](http://developer.android.com/reference/android/graphics/Canvas.html#drawColor% 28int%29)用您选择的背景色填充整个位图。还要尝试给“Bitmap”或“ImageView”一个大小。 – torque203

回答

1

使用通过扩展视图类customview来实现这一目标: 让我们把你的自定义类说LineView。所以这就是Line的样子。现在

LineView.java

import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.view.View; 

    public class LineView extends View { 
    Paint paint = new Paint(); 

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

    public LineView(Context context, AttributeSet attrs, int defstyle) { 
    super(context, attrs, defstyle); 
     } 


    public LineView(Context context) { 
    super(context); 
    paint.setColor(Color.BLACK); 
} 

@Override 
public void onDraw(Canvas canvas) { 
     canvas.drawLine(0, 0, 20, 20, paint); 
} 

} 

,你必须在你的mainactivity实例化这个。你可以使用java代码或xml来实现。使用Java代码它看起来就像这样:

import android.app.Activity; 
    import android.graphics.Color; 
    import android.os.Bundle; 

public class MainActivity extends Activity { 
    LineView lineview; 
    Button button; 

    @Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lineview = (LineView)findViewById (R.id.lineView1); 
    button = (Button)findViewById(R.id.button1); 
    lineview.setVisibility(View.INVISIBLE); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      lineview.setVisibility(View.VISIBLE); 
     } 
    }); 


    } 
} 
+0

此代码绘制一条线,但它不会在我的布局中执行。我的意思是,当我点击一个按钮时,我想绘制一条线,但该按钮仍应该可见并且处于活动状态。但是,该代码设置了不同的视图。 –

+0

查看我编辑的答案。不要忘了在'Custom and Library Views'下的调色板中添加一个lineview对象到你的xml中。让我知道它是否有效。 – Susheel

+0

我已经更新了这个问题。代码给我一个错误。 –

1

您必须创建一个扩展View自定义视图类。在该类中,您将覆盖传递画布的onDraw方法。创建一个Paint对象并将其与上面的drawLine函数一起使用。

我会建议仰视手指画的应用程序的教程。网上至少有一些,他们是一个很好的自定义视图介绍和覆盖onDraw方法。

+0

。我想清除一些事情:我在MainActivity中使用onDraw?你知道任何具体的教程。我的意思是,我不是在创建绘画应用程序。我只想画一条从A到B的线。 –

+0

你不要打电话给你自己。您重写View类的onDraw方法。我不能建议一个具体的教程(这是脱离主题的SO),但如果你谷歌的手指画应用程序将有很多选择。您可能不会自己制作手指绘画应用程序,但有关自定义视图的基础知识将在教程中予以介绍,这将是您绘制线条所需的内容 – Zerp