2016-06-13 7 views
0

私の目標は、モバイルスクリーンセンターにシンプルなボールを作り、指をドラッグするときに画面の周りを動かすことです。アクティビティ内でビューを作成する方法は?

私はキャンバスとビットマップを使いたいと思っていました(私がAndroidの世界では新しいと言われている最善の方法だとは分かりません)。

ボタンをクリックしたときに、キャンバスデザインのスクリプトを含むアクティビティが作成されたように、アクティビティで関数を作成しました(これも最良の方法かどうかわかりません。関数自体の中のボール)。これにより

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

基本的なチュートリアルで始めるのはなぜですか?最初から真ん中で始めているのは分かりません。 –

+0

ええ、私も基礎から始めたいと思います。私はたくさんの場所から情報を得ることができます。 – gui5711

答えて

0

"活動として。

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

あなたは、Androidに新しいしているので、通常は画面全体を引き継ぎコンポーネント、およびその小さな作品として見るよう活動を視覚化してみてください。ボールにと表示するには、アクティビティにしてください。

res/layoutフォルダには、MainActivityのレイアウト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> 

が、その後、デバッグしやすくする必要があります:あなたは、次のようないくつかのXML、とここにあなたのボールのビューを追加することができます。

私は複雑なアプリケーションにジャンプする前に、まず最初に基本を学ぶためのコメントに同意します。 Androidデベロッパーのページを見て、コンポーネントを学び、簡単なチュートリアルを試してみてください。 Androidアプリケーションを構成し、それらを完全に理解し、相互にやり取りする方法があなたの人生をより簡単にする多くのコンポーネントがあります。 Androidへようこそ!

下記の質問に答えるために編集する...私はjavaでそれをすることはできますか?私はビューを "膨らませる"ことについて何かを検索しましたが、それが正しいかどうかわかりません。

はい、addViewを使用して、アクティビティの親レイアウトにビューを追加できます。 Inflateは、XMLのビューをJavaオブジェクトにインスタンス化するためのもので、Ballレイアウト用のXMLファイルがないため、あなたのケースでは機能しません。あなたは、新しいボールオブジェクトを作成し、レイアウトに追加しaddViewを使用する必要があります:

レイアウトがあなたの活動のXMLで見つかった親のレイアウトです
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); 

。他の人が指摘したように

<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

アクティビティを作成する場合は、アクティビティクラスでアクティビティを拡張する必要があります。ビューを拡張することで、カスタムビューを作成できます。カスタムビューは、xml内で、またはアクティビティやフラグメント内で動的に使用できます。たとえば、ImageView、TextView、EditText、すべてのレイアウトはViewを拡張します。これは、アクティビティやフラグメント内でxmlまたは動的に使用できます。

「ボール」ビューではなく、活動で、あなたが「ボールを起動することはできませんので、あなたがAndroid.content.ActivityNotFoundExceptionを得ている理由は次のとおりです。上記のネオの答えに拡大し、編集した質問を与え

+0

こんにちは、お返事ありがとうございます。私は自分自身を正しく表現していないと思うので、すみません。私は私の探求のいくつかの変更を行い、おそらくそれはあなたが私が欲しいものを理解するのに役立ちます:) – gui5711

0

BallではないViewを拡張し、:あなたはまだ持っていない場合は、我々は上記の私の例を使用している場合、あなたのLinearLayoutタグは次のようになりますので、あなたは、それにIDを割り当てる必要がありActivitystartActivity()メソッドを使用するには、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 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クラス:以下の例のXMLリソースです

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にそれを追加することです(そうしないと'LL引き続き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> 

希望します。

関連する問題