如何在活动中创建视图?
我的目标是在移动屏幕中心创建一个简单的球,以便在他们拖动我的手指时将其移动到屏幕上。为此我想使用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 .:我可能会打电话,因为我不知道它的真名。
扩展在新的答案上方并给予您编辑的问题:
你所得到的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">
它为我坦克工作! 只是一个问题 - 我可以用java吗?我搜索了一些关于“膨胀”的视图,但我不知道它是否正确... 我打算查看Android开发者页面以了解更多信息:D – gui5711
很高兴能够听到它:)请参阅我的编辑回答你的问题。你应该能够找到大量的例子,如果你搜索的东西,如“以编程方式添加视图Android”也。 –
如果你想创建一个活动,那么你需要通过Activity类扩展它。通过扩展视图,您可以创建一个自定义视图,您可以在xml中或在您的活动或片段中动态使用该视图。例如,ImageView,TextView,EditText,所有布局都可以扩展View,您可以在活动或片段中使用xml或动态使用。
嗨,谢谢你的回答。我想我没有正确表达自己,所以很抱歉。我对我的追求做了一些改变,也许它可以帮助你理解我想要的东西:) – gui5711
正如其他人指出,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>
希望这有助于。
“如何创建新的活动扩展视图?” - 你没有。一个'Activity'包含'Views',但一个'Activity'本身不是'View'。 – CommonsWare
为什么不从一个基本的教程开始? U从中间开始不知道 –
是的,我也想从基础开始。我从很多地方获取所有信息。如果你有一些教程来表明我将不胜感激 – gui5711