开发者

Multiple Child view in single Parent view

开发者 https://www.devze.com 2023-02-28 18:52 出处:网络
i have made two view classes in first view class i am making more than one instance of second view and adding into first view but it displaying only one view

i have made two view classes

in first view class i am making more than one instance of second view

and adding into first view but it displaying only one view

please help me..

This is Parent View

package com.game.AntSmash;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.view.SurfaceView;
import android.widget.AbsoluteLayout;
import android.widget.LinearLayout;

public class surface extends LinearLayout {


    public surface(Context context) {
        super(context);
        this.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT,
                LinearLayout.Lay开发者_StackOverflow中文版outParams.FILL_PARENT));
        this.setBackgroundDrawable(getResources().getDrawable(R.drawable.grass));
        Drawable d = getResources().getDrawable(R.drawable.ant_big);
        d.setBounds(160, 0, 160 + d.getIntrinsicWidth(), d.getIntrinsicHeight());
        this.addView(new antView(context, d, 0.2f, 0, 0, 0, 0, 0));
        d = getResources().getDrawable(R.drawable.ant_big);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            this.addView(new antView(context, d, 0.2f, 0, 0, 160, 0, 0));

    }
}

This is child view

package com.game.AntSmash;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Picture;
import android.graphics.drawable.Drawable;
import android.text.BoringLayout.Metrics;
import android.view.View;
import android.widget.ImageView;

public class antView extends View {
    int screenW = 320;
    int screenH = 480;
    int X;
    int Y;
    int initialY ;
    int ballW;
    int ballH;
    int angle;
    float dY;
    float dX;
    float acc;
    int initialX;
    Drawable ball;


    public antView(Context context, Drawable bmp, float speed, int dx, int dy, int initialX, int initialY, int angle) {
        super(context); 
        this.ball = bmp;
        this.acc = speed;
        this.dX = dx;
        this.dY = dy;
        this.initialX = initialX;
        this.initialY = initialY;
        this.angle = angle;
    }

    @Override
    public void onDraw(Canvas canvas){
        super.onDraw(canvas); 

        //compute roughly ball speed and location
        Y+= (int) dY; //increase or decrease vertical position  
        if (Y > (screenH - ballH)) {
            dY=(-1)*dY; //reverse speed when bottom hit 
        }
        dY+= acc; //increase or decrease speed

        //compute roughly ball speed and location
        X+= (int) dX; //increase or decrease vertical position  
        if (X > (screenW - ballW)) {
            dX=(-1)*dX; //reverse speed when bottom hit 
        }
        dX+= acc / 5; //increase or decrease speed


        //increase rotating angle
        if ((angle = angle + 10) >360) angle =0;

        //draw ball
        canvas.save(); //save the position of the canvas
        canvas.rotate(angle, X + (ballW / 2), Y + (ballH / 2)); //rotate the canvas
        canvas.translate(X, Y);
        ball.draw(canvas);
        canvas.restore(); //rotate the canvas back so that it looks like ball has rotated


        //call the next frame
        if(X > screenW - ballW && Y > screenH - ballH) {

        } else {
            invalidate();
        }

    }

}

And this is activity

package com.game.AntSmash;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;

public class AntSmashActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout v = new surface(this);
        setContentView(v);

    }
}


You need to set some layout params for your LinearLayout parent, also use setOrientation() to define how the child views should be displayed.

The dimension of the child is probably just too big.

If you want to use 2D drawing, I recommend a tutorial series I have written. Its easier to use a SurfaceView for 2D drawing than using Views and Layouts.

A tip at the end: A class name should start with an upper case. Surface and AntView instead of surface and antView.

0

精彩评论

暂无评论...
验证码 换一张
取 消