2016-06-13 92 views
0

我的目标是在移动屏幕中心创建一个简单的球,以便在他们拖动我的手指时将其移动到屏幕上。为此我想使用Canvas和位图(我不知道它是否是已经说过的最好的方式,我是Android世界中的新手)。如何在活动中创建视图?

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

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

通过这样做,应该拨打下列活动:

com.teste package; 
     
    import android.content.Context; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.util.AttributeSet; 
    import android.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); 
        } 
    } 

而且两者在每个位置扳回一球...... 但我得到以下错误:

Android.content.ActivityNotFoundException:无法找到显式活动类{com.teste/com.teste.ball};你有没有在你的AndroidManifest.xml中声明这个活动?

我在做什么错?

OBS .:我可能会打电话,因为我不知道它的真名。

+0

“如何创建新的活动扩展视图?” - 你没有。一个'Activity'包含'Views',但一个'Activity'本身不是'View'。 – CommonsWare

+0

为什么不从一个基本的教程开始? U从中间开始不知道 –

+0

是的,我也想从基础开始。我从很多地方获取所有信息。如果你有一些教程来表明我将不胜感激 – gui5711

回答

0

扩展在新的答案上方并给予您编辑的问题:

你所得到的Android.content.ActivityNotFoundException的原因是因为“球”是一个视图,而不是一个活动,所以你不能启动“球“作为一项活动。

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 Developer页面来学习组件并尝试简单的教程。组成Android应用程序的组件很多,并且充分了解它们以及它们如何相互交互将使您的生活更轻松:)。祝你好运,欢迎来到Android!

编辑以回答以下问题...我可以用java做到吗?我搜索了一些关于“膨胀”视图的东西,但我不知道它是否正确?

是的,您可以使用addView将视图添加到活动的父布局。 Inflate用于将XML中的视图实例化为Java对象,所以它不适用于您的情况,因为您的球布局没有xml文件。您将需要创建一个新的球对象,并使用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); 

其中布局是您的活动的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"> 
+0

它为我坦克工作! 只是一个问题 - 我可以用java吗?我搜索了一些关于“膨胀”的视图,但我不知道它是否正确... 我打算查看Android开发者页面以了解更多信息:D – gui5711

+0

很高兴能够听到它:)请参阅我的编辑回答你的问题。你应该能够找到大量的例子,如果你搜索的东西,如“以编程方式添加视图Android”也。 –

0

如果你想创建一个活动,那么你需要通过Activity类扩展它。通过扩展视图,您可以创建一个自定义视图,您可以在xml中或在您的活动或片段中动态使用该视图。例如,ImageView,TextView,EditText,所有布局都可以扩展View,您可以在活动或片段中使用xml或动态使用。

+0

嗨,谢谢你的回答。我想我没有正确表达自己,所以很抱歉。我对我的追求做了一些改变,也许它可以帮助你理解我想要的东西:) – gui5711

0

正如其他人指出,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类和一个XML资源组成,您可以在res/layout/activity_ball.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> 

希望这有助于。