从 Activity 用画布画一条线

Posted

技术标签:

【中文标题】从 Activity 用画布画一条线【英文标题】:Drawing a line with canvas from an Activity 【发布时间】:2012-10-20 16:08:44 【问题描述】:

我已阅读以下链接:

How to draw a line in android

http://marakana.com/s/android_2d_graphics_example,1036/index.html

http://developer.android.com/reference/android/graphics/Canvas.html

Activity.setContentView, View.setContentView?

How to create an activity without 'setContentView(R.layout.main)'

http://www.jayway.com/2009/03/26/layout-resources-in-android/

我已经阅读了之前谈论我的问题的文章,但我无法解决我的问题。

我的问题是我想画直线来模拟图像之间的连接,但基本上是画直线。

我见过的所有示例都有一个从活动继承的主类,还有一个从视图继承的内部类。在主类中设置包含 View 类的用户界面,所以我们有一个空的用户界面。 像这样的:

public class ActivityMain extends Activity

public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    MyView view1 =new MyView(this);
    setContentView(view1);       


public class MyView extends View 
    public MyView(Context c) 
        super(c);
    

//And more code

我想在继承自 Activity 的类中设置我的用户界面(xml 文件)(像往常一样):

public class ActivityMain extends Activity
public void onCreate(Bundle savedInstanceState) 
  super.onCreate(savedInstanceState);
  setContentView(R.layout.union);


我想从继承自activity的类中画直线,我不想有任何继承自View的类。

我尝试了以下方法,但没有看到任何行:

public boolean onTouchEvent(MotionEvent event) 
int x = (int) event.getX();
int y = (int) event.getY();

switch(event.getAction()) 
    case MotionEvent.ACTION_DOWN:
        Canvas canvas = new Canvas();
        Paint paint = new Paint();
                    paint.setColor(Color.BLACK);
        canvas.drawLine(0, 0, 300, 700, paint);     
    break;
    case MotionEvent.ACTION_MOVE:
    break;
    case MotionEvent.ACTION_UP:
    break;
   
return true;

在前面的方法中,我想从角 0,0 到角 300,700 画一条线。这是一个简单的测试。但我什么都不画,也不知道为什么。

【问题讨论】:

你能说出你为什么不想子类化视图吗?视图是您屏幕上的画布。当您在活动中创建这样的画布时,它不会附加到任何东西上,您只是在一个不属于屏幕的表面上绘图。如果你有一个观点,你可以借鉴那个观点,但我不知道你为什么反对它。 aaaaaammm 好的。谢谢!但是如果我使用一个扩展 View 类的类,我该如何在这个类中设置用户界面的内容?因为我不能使用 setContentView(R.layout.xml_file),如果可能的话我会使用 View 类. 我不太确定“设置用户界面”是什么意思,但是您可以在自己的活动中设置 UI,然后活动可以在您的自定义视图上调用一个方法,例如 (drawLine( start, end)),您的视图将处理并绘制线。 我指的是我在屏幕上显示的元素:图像、按钮等....xml 文件。例如: schemas.android.com/apk/res/android" xmlns:tools="schemas.android.com/tools" android:layout_ android:layout_ android:orientation="vertical" > 你可以告诉我这样做的代码吗???谢谢 【参考方案1】:

您可以扩展视图并覆盖onDraw 并在那里管理您的所有行。

然后,您可以像这样在另一个 xml(可以在 Activity 中使用)中添加这个视图(可以是全屏):

<my.package.myView
    android:layout_width=@"fill_parent"
    android:layout_height=@"fill_parent"/>

确保您在主要活动中使用的布局是RelativeLayout,这样您就可以填满整个屏幕并位于视图的顶部。要将视图置于视图之上,请确保您的视图位于活动 xml 的末尾。

【讨论】:

是的。你可以有一个普通的 xml (main_xml) 并像这样在你的 main_xml 中添加你的视图。

以上是关于从 Activity 用画布画一条线的主要内容,如果未能解决你的问题,请参考以下文章

从两个按钮之间的手势画一条线

用 CALayer 画一条线

从 UIViewController 画一条线

twoway怎么画一条线

用three.js动态画一条线

使用strokeColor,从中心到圆周画一条线