2013-04-29 125 views
1

您好我正在android.I创建一个自定义视图有一个LinerarLayout我添加自定义views.I设法添加一个自定义视图编程,但如果我添加另一个它是没有得到添加到layout.I不知道哪里会出错。我的主要活动。无法以编程方式将自定义视图添加到布局

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

     LinearLayout container = (LinearLayout) findViewById(R.id.container); 
     final MyAnimationView animView = new MyAnimationView(this); 
     container.addView(animView); 
     final MyAnimationView animView1 = new MyAnimationView(this);   
     container.addView(animView1);  
    } 

和我的自定义视图类

public class MyAnimationView extends TextView implements ValueAnimator.AnimatorUpdateListener { 

public final ArrayList<ShapeHolder> balls = new ArrayList<ShapeHolder>(); 
AnimatorSet animation = null; 
private float mDensity; 

public MyAnimationView(Context context) { 
    super(context);   
    mDensity = getContext().getResources().getDisplayMetrics().density; 
    ShapeHolder ball0 = addBall(75f, 400f);    

} 
public MyAnimationView(Context context,float x,float y) { 
    super(context);  
    mDensity = getContext().getResources().getDisplayMetrics().density; 
    ShapeHolder ball0 = addBall(105f, 400f);   



} 

private void createAnimation() { 
    if (animation == null) {     
     ObjectAnimator anim0=ObjectAnimator.ofFloat(balls.get(0),"y",getHeight(),500f).setDuration(500); 
     animation = new AnimatorSet(); 
     animation.playTogether(anim0);    
     anim0.addUpdateListener(this); 


    } 
} 

private ShapeHolder addBall(float x, float y) { 
    OvalShape circle = new OvalShape(); 
    circle.resize(100f * mDensity, 100f * mDensity); 
    ShapeDrawable drawable = new ShapeDrawable(circle); 
    ShapeHolder shapeHolder = new ShapeHolder(drawable); 
    shapeHolder.setX(x - 25f); 
    shapeHolder.setY(y - 25f); 
    int red = (int)(100 + Math.random() * 155); 
    int green = (int)(100 + Math.random() * 155); 
    int blue = (int)(100 + Math.random() * 155); 
    int color = 0xff000000 | red << 16 | green << 8 | blue; 
    Paint paint = drawable.getPaint(); //new Paint(Paint.ANTI_ALIAS_FLAG); 
    int darkColor = 0xff000000 | red/4 << 16 | green/4 << 8 | blue/4; 
    RadialGradient gradient = new RadialGradient(37.5f, 12.5f, 
      50f, color, darkColor, Shader.TileMode.CLAMP); 
    paint.setShader(gradient); 
    shapeHolder.setPaint(paint); 
    balls.add(shapeHolder); 
    return shapeHolder; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    for (int i = 0; i < balls.size(); ++i) { 
     ShapeHolder shapeHolder = balls.get(i); 
     canvas.save(); 
     canvas.translate(shapeHolder.getX(), shapeHolder.getY()); 
     shapeHolder.getShape().draw(canvas); 
     canvas.restore(); 
    } 
} 

public void startAnimation() { 
    createAnimation(); 
    animation.start(); 
} 

public void onAnimationUpdate(ValueAnimator animation) { 
    invalidate(); 
} 
} 

编辑:这是我的线性布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools"  
android:id="@+id/container" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
tools:context=".MainActivity" > 

<Button 
    android:id="@+id/startButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" /> 

任何帮助将不胜感激。

+0

请发布xml布局。我认为你必须做一些LayoutParams来适应linearLayout中的两个视图。 – Opiatefuchs 2013-04-29 13:59:26

+0

尝试更改'LinearLayout'的'定位' – 2013-04-29 14:00:03

+0

@Opiatefuchs嗨,好友我已经发布了我的xml – vinoth 2013-04-29 14:03:32

回答

0

不,它会被添加,但你看不到它。因为您的第一个视图将占用屏幕的全部空间。而第二个视图将添加到您的第一个视图的下方,这样它就会隐藏在设备的可见部分中。我也遇到了同样的问题。我用两种布局解决了这个问题。有关我的解决方案,请参阅here

我想这是为什么我提供这个解决方案,如果不是请让我知道..

+0

所以我如何解决这个好友 – vinoth 2013-04-29 14:11:26

+0

对不起朋友。看到我更新的答案。只要引用它,我会在一小时内回复。现在我正在离开办公室。 – Gunaseelan 2013-04-29 14:30:48

+0

现在很多好友我设法得到它。 – vinoth 2013-04-30 04:56:25

2

只是一个假设,鸵鸟政策知道,如果它的问题。尝试在你的主要做到这一点:

LinearLayout container = (LinearLayout) findViewById(R.id.container); 

    final MyAnimationView animView = new MyAnimationView(this); 

    animView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams. 
           WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

    container.addView(animView); 

    final MyAnimationView animView1 = new MyAnimationView(this); 

    animView1.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams. 
           WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f)); 

    container.addView(animView1); 

它工作?

相关问题