直接绘制到画布上并使用Java代码创建布局

问题描述 投票:1回答:1

I was following the series on canvas drawing,在1:27处引用:“ 负责管理和绘制布局的类必须扩展SurfaceView,还需要实现一个线程,因此我们将实现[ C0]界面

作者仅使用Runnable代码而不使用xml文件来实现直接绘制到画布,而是使用java类而不是java。他在xml中将布局定义为:

java

关联的活动文件具有如下代码:

public class Activity_Animation002_Layout extends SurfaceView implements Runnable{

    Thread thread = null;

    public Activity_Animation002_Layout(Context context){
        super(context);
    }

    @Override
    public void run(){
        while(CanDraw){
        //TODO- carry out drawing....
     }
    }
    //some more code to follow
}  

此绘图技术是否过时?我的意思是我搜索了很多内容,然后尝试搜索Google,检查了以下页面:public class AnimationActivity002 extends Activity{ Activity_Animation002_Layout animation002_LayoutView; @Override protected void onCreate(Bundle savedInstance){ super.onCreate(savedInstanceState); animation002_LayoutView = new Activity_Animation002_Layout(this); setContentView(animation002_LayoutView); } } Custom DrawingCanvas DrawingLayoutsLayout Resource,但是它们都没有扩展SurfaceView ]。 我可以在文档中哪里找到它? 但是,如果这是一种过时的技术或东西,那么做同一件事的新方法是什么?

java android canvas surfaceview
1个回答
0
投票
    您可以更轻松地完成此操作,但实际上是关于
  1. 您真的想在这里实现。您只需在surfaceViewView类中就可以完成绘图。
  2. onDraw(Canvas)是一种特殊的视图。使用SurfaceView,您可以在另一个线程(而不是UI线程)上绘制。这就是为什么您的类必须实现SurfaceView的原因-您必须将其传递给线程。一个例子:

      [Runnable在UI线程上绘制,因此,如果尝试在该视图中制作动画并在UI线程上做一些事情(例如,滚动浏览某个布局,它将变得很迟钝)
  3. [View画在另一个线程上,因此您可以自由设置动画效果,并且滚动,单击内容等而不会出现滞后。
  4. SurfaceView也可能用于游戏(屏幕上正在发生很多事情),但是我不会说它在当今已经大量使用。但事实是,有可能基于SurfaceView或类似拍打小鸟的东西制作一些躲闪的游戏

总结:

    我不认为这是一种过时的技术,更像是它不常用的技术,因为您将在特定的情况下使用它,而您需要绘制某些内容(例如简单的动画)而无需冻结UI线程
  • 您也可以绘制一个简单的SurfaceView类,但仅当您不打算使用UI进行其他操作时,才可以。 (或绘图不长)。
  • 您提到的视频中的内容
可以用简单的View完成,因为那里没有发生太多事情-您只需绘制一次图像即可。我什至还记得我完全用View类做过纸牌游戏,您将纸牌拖到中间进行玩。
© www.soinside.com 2019 - 2024. All rights reserved.