有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在活动中创建视图?

我的目标是在移动屏幕中心创建一个简单的球,这样我就可以在他们拖动我的手指时在屏幕上移动它

为此,我想使用画布和位图(我不知道这是否是最好的方式,因为我已经说过我是Android世界的新手)

我在我的活动中创建了一个函数,这样当单击一个按钮时,就会创建一个包含画布设计脚本的活动(同样,我不知道这是否是最好的方法。在php脚本或javascript中,我会在函数本身中创建球)。我的代码如下:

public void StartGame(View v)  {
       Intent i = new Intent(MainActivity.this, ball.class);
       startActivity(i);
    }

通过这样做,它应该调用以下活动:

com.teste package;
    
    import 安卓.content.Context;
    import 安卓.graphics.Canvas;
    import 安卓.graphics.Color;
    import 安卓.graphics.Paint;
    import 安卓.util.AttributeSet;
    import 安卓.view.View;
    
    
    public class ball extends View {
    
        Paint pincelPreto private;
        Paint pincelAmerelo private;
    
        Public ball (Context context) {
            super (context);
        }
    
        Public ball (Context context, attributeSet attrs) {
            super (context, attrs);
    
            setBackgroundColor (Color.LTGRAY);
            pincelPreto = new Paint ();
            pincelPreto.setColor (Color.BLACK);
            pincelAmerelo = new Paint ();
            pincelPreto.setColor (Color.YELLOW);
    
            setFocusable (true);
        }
    
        @Override
        protected void onDraw (Canvas canvas) {
            super.onDraw (canvas);
    
            canvas.drawCircle (200, 200, 200, pincelAmerelo);
        }
    }

两人在每个位置都抽一个球。。。 但我得到了以下错误:

安卓。所容纳之物ActivityNotFoundException:找不到显式活动类{com.teste/com.teste.ball};您是否已在AndroidManifest中声明此活动。xml

我做错了什么

注意事项:我可能叫活动,因为我不知道它的真名


共 (3) 个答案

  1. # 1 楼答案

    根据Neo的上述回答展开讨论,并给出您经过编辑的问题:

    你得到安卓系统的原因。所容纳之物ActivityNotFoundException是因为“ball”是一个视图,而不是一个活动,所以不能将“ball”作为活动启动

    public void StartGame(View v)  {
        Intent i = new Intent(MainActivity.this, ball.class);
        startActivity(i);
    }
    

    因为你是Android新手,试着把一个活动想象成一个通常占据整个屏幕的组件,把一个视图想象成一个较小的部分。你希望你的球在你的活动中显示

    res/layout文件夹中,应该有一个用于MainActivity的布局xml文件。您可以使用一些xml在此处添加球视图,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <com.teste.ball
            android:id="@+id/ball"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
        </com.teste.ball>
    </LinearLayout>
    

    一旦你做到了这一点,你可能会遇到其他问题,但是调试起来应该更容易

    我同意上面的评论,在开始一个复杂的应用程序之前先学习基础知识。看看Android开发者页面,了解组件并尝试简单的教程。Android应用程序由许多组件组成,充分理解它们以及它们之间的交互方式将使您的生活变得更轻松:)。祝你好运,欢迎来到Android

    编辑以回答下面的问题。。。我能用java做吗?“我不知道什么是正确的观点吗?”

    是的,您可以使用addView将视图添加到活动的父布局中。Inflate用于将XML中的视图实例化为Java对象,因此它在您的情况下不起作用,因为您没有用于球布局的XML文件。您需要创建一个新的Ball对象,并使用addView将其添加到布局中:

    LinearLayout layout = findViewById(R.id.main);
    
    Ball ball = new Ball(this);
    ball.setLayoutParams(new LinearLayout.LayoutParams(
        LinearLayout.LayoutParams.WRAP_CONTENT,
        LinearLayout.LayoutParams.WRAP_CONTENT));
    
    layout.addView(ball);
    

    其中layout是在活动的XML中找到的父布局。如果还没有,您可能需要为其分配一个ID,因此如果我们使用上面的示例,您的LinearLayout标记将如下所示:

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
  2. # 2 楼答案

    正如其他人所指出的,Ball扩展了View,这不是Activity。要使用startActivity()方法,需要向其传递一个Activity。首先创建BallView

    package com.test.myapplication;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.view.View;
    
    public class BallView extends View {
    
        private final Paint pincelPreto;
        private final Paint pincelAmerelo;
    
        public BallView(final Context context) {
            super(context);
    
            setBackgroundColor(Color.LTGRAY);
            pincelPreto = new Paint();
            pincelPreto.setColor(Color.BLACK);
            pincelAmerelo = new Paint();
            pincelAmerelo.setColor(Color.YELLOW);
        }
    
        @Override
        protected void onDraw(final Canvas canvas) {
            super.onDraw(canvas);
    
            canvas.drawCircle(200, 200, 200, pincelAmerelo);
        }
    }
    

    然后创建一个BallActivity。这包括一个Java类和一个放在res/layout/activity_ball.xml下的XML资源。下面是一个示例XML资源:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent">
    
        <com.test.myapplication.BallView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:focusable="true"/>
    </FrameLayout>
    

    BallActivity类:

    package com.test.myapplication;
    
    import android.app.Activity;
    import android.os.Bundle;
    
    public class BallActivity extends Activity {
    
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_ball);
        }
    }
    

    启动BallActivity需要做的最后一件事是将其添加到AndroidManifest.xml(否则您将继续得到ActivityNotFoundException):

    <?xml version="1.0" encoding="utf-8"?>
    <manifest package="com.test.myapplication"
              xmlns:android="http://schemas.android.com/apk/res/android">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
            <activity android:name=".BallActivity"/>
        </application>
    
    </manifest>
    

    希望这有帮助

  3. # 3 楼答案

    如果要创建活动,则需要按活动类对其进行扩展。通过扩展视图,您可以创建一个自定义视图,可以在xml中使用,也可以在活动或片段中动态使用。例如ImageView、TextView、EditText、All layouts extends View,您可以通过xml或动态方式在活动或片段中使用它们