1

私は、上にさらに2つのレイヤーがある背景レイアウトをどのように持っているかを理解しようとしています。imageView(人物)をタップすると、ボートの一部になり、ボートの上に描画されます。このように、ボートの imageView がタップされると、人は川を渡ってボートと一緒に移動します。タップするとボートが前後に動きますが、タップすると人のimageViewをボートのimageViewの子のように設定したいと思います。現在、私はその人をボートのimageViewの子にすることに取り組んでいますが、私が試みてきたことはすべてコンパイルして実行し、適切な場所にすべてを表示しますが、人のimageViewは代わりに左上にあります船内。誰かが私が間違っていることと、このように複数のレイヤーを作成する最善の方法を指摘していただければ幸いです。

エラーはありません。人物オブジェクトがボートに表示されません。

主な活動は次のとおりです。

package com.cannibal_photographer;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

    FrameLayout main = (FrameLayout)findViewById(R.layout.activity_main);
    LayoutInflater li = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewGroup boatview = (ViewGroup) li.inflate(R.layout.boatlayout,main,false);
    View personview = li.inflate(R.layout.personlayout,boatview,false);

    ((ViewGroup) main).addView(boatview);
    ((ViewGroup) boatview).addView(personview);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

ボートクラスは次のとおりです。

package com.cannibal_photographer;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;

public class Boat extends ImageView {

boolean state = true;

public Boat(Context context) {
    super(context);
    init();
}

 public Boat(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init();
    }

 public Boat(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

private void init()
{
    this.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick (View v) {
            if (state) {
                moveBoat(-215);
            } else {
                moveBoat(215);
            }
        }
    });
}

//TranslateAnimation animation;
//TranslateAnimation animation2;

public void moveBoat(int amount){
    /*
    animation = new TranslateAnimation(0, 0, 0, amount);
    animation.setDuration(250);
    animation.setFillAfter(true);
    this.startAnimation(animation);
    */
    this.offsetTopAndBottom(amount);
    state = !state;
}
}

人物クラスは次のとおりです。

package com.cannibal_photographer;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;

public class Person extends ImageView {

boolean state = true;

public Person(Context context) {
    super(context);
    init();
}

 public Person(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init();
    }

 public Person(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

private void init()
{
    this.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick (View v) {
            if (state) {
                //movePerson(325,-230);
            } else {
                //movePerson(-325,230);
            }
        }
    });


}

public void movePerson(int x, int y)
{
    this.offsetLeftAndRight(x);
    this.offsetTopAndBottom(y);

    state = !state;
}

}

背景の主なレイアウトは次のとおりです。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@layout/activity_main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
</FrameLayout>

ボートのレイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/framelayoutView"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<com.cannibal_photographer.Boat
    android:id="@+id/boatimageView"
    android:layout_width="78dp"
    android:layout_height="130dp"
    android:layout_marginLeft="105dp"
    android:layout_marginTop="225dp"
    android:src="@drawable/boat" />

</FrameLayout>

そして最後に、人のレイアウトは次のとおりです。

<?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.cannibal_photographer.Person
            android:id="@+id/personView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/greensquare"
            android:gravity="center_vertical" />

</FrameLayout>
4

0 に答える 0