Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将TextView放入视图中_Java_Android_Android Layout_View_Textview - Fatal编程技术网

Java 将TextView放入视图中

Java 将TextView放入视图中,java,android,android-layout,view,textview,Java,Android,Android Layout,View,Textview,我正在尝试这个降雪计划 我需要把TextView放在View类中,类SnowFallView扩展视图,第42行,我该怎么做 我可以实例化TextView并像这样添加它吗 package in.isuru.animate; public class SnowFall extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreat

我正在尝试这个降雪计划

我需要把TextView放在View类中,类SnowFallView扩展视图,第42行,我该怎么做

我可以实例化TextView并像这样添加它吗

 package in.isuru.animate;



 public class SnowFall extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SnowFallView snowFallView = new SnowFallView(this);
            setContentView(snowFallView);
            snowFallView.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_image));

    }

    private class SnowFallView extends View {
            private int snow_flake_count = 5;
            private final List<Drawable> drawables = new ArrayList<Drawable>();
            private int[][] coords;
            private final Drawable snow_flake;
            private TextView countDownView;

            public SnowFallView(Context context) {
                    super(context);
                    setFocusable(true);
                    setFocusableInTouchMode(true);

                    snow_flake = context.getResources().getDrawable(R.drawable.snow_flake);
                    snow_flake.setBounds(0, 0, snow_flake.getIntrinsicWidth(), snow_flake
                            .getIntrinsicHeight());

                    countDownView = new TextView(context);
                    countDownView.setText("It's working");
                    addContentView(countDownView, null);

                    //LayoutInflater inflater = getLayoutInflater();
                    //getWindow().addContentView(inflater.inflate(R.layout.text_layout, null), new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                    //ViewGroup.LayoutParams.FILL_PARENT));
            }

            @Override
            protected void onSizeChanged(int width, int height, int oldw, int oldh) {
                    super.onSizeChanged(width, height, oldw, oldh);
                    Random random = new Random();
                    Interpolator interpolator = new LinearInterpolator();

                    snow_flake_count = Math.max(width, height) / 20;
                    coords = new int[snow_flake_count][];
                    drawables.clear();
                    for (int i = 0; i < snow_flake_count; i++) {
                            Animation animation = new TranslateAnimation(0, height / 10
                                    - random.nextInt(height / 5), 0, height + 30);
                            animation.setDuration(10 * height + random.nextInt(5 * height));
                            animation.setRepeatCount(-1);
                            animation.initialize(10, 10, 10, 10);
                            animation.setInterpolator(interpolator);

                            coords[i] = new int[] { random.nextInt(width - 30), -30 };

                            drawables.add(new AnimateDrawable(snow_flake, animation));
                            animation.setStartOffset(random.nextInt(20 * height));
                            animation.startNow();
                    }
            }

            @Override
            protected void onDraw(Canvas canvas) {
                    for (int i = 0; i < snow_flake_count; i++) {
                            Drawable drawable = drawables.get(i);
                            canvas.save();
                            canvas.translate(coords[i][0], coords[i][1]);
                            drawable.draw(canvas);
                            canvas.restore();
                    }
                    invalidate();
            }

    } 
}
但是当我这样做的时候,我得到了一个错误

06-04 00:22:22.364:E/AndroidRuntime359:java.lang.RuntimeException:无法启动活动组件信息{in.isuru.animate/in.isuru.animate.SnowFall}:java.lang.NullPointerException

所有导入都已完成。

是的,您可以在运行时添加这样的文本视图。这假设MyClass子类为android.content.Context。我不确定你在问题的第二部分问的是什么布局。您已经具有容器布局linearLayout

countDownView = new TextView(context);
countDownView.setText("It's working");
addContentView(countDownView, null);
我认为你的问题在于:

addContentView(countDownView, null);
你应该使用

addView(countDownView)

我不确定这是否100%正确,而不是添加ContentView,但您需要这样做

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    SnowFallView snowFallView = new SnowFallView(this);
    TextView txt1 = new TextView(this);
    linearLayout.addView(snowFallView);
    linearLayout.addView(txt1);
    setContentView(linearLayout);
    snowFallView.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_image));
}
还要从SnowFallView类中删除这些线


然后我得到一个名为addViewTextView的错误,该方法对于类型SnowFall.SnowFallViewyes您的权利是未定义的。这是因为SnowFallView继承自View而不是ViewGroup。addContentView是Window类的一个方法。它需要有效的布局参数,而不是Null尝试扩展ViewGroup而不是View,以及ovveride onLayout,以便在ViewGroup@Isuru:我需要将TextView放在视图类中您不能将TextView或其他视图中的任何类型的视图仅放在视图组中。您提到的降雪活动的“内容”是一个SnowFallView,它扩展了视图。这根本无法完成。好的,我可以将视图更改为视图组吗?它会给现有动画带来错误吗?我的问题没有解决方案,但感谢所有帮助过我的人!如何添加测试?我试过txt1.setTextTesting;但它没有显示出来。TextView不显示。可能是SnowFallView占据了整个屏幕,没有空间显示TextView。尝试更改addView的顺序。。。所以首先添加txt1。你可能需要调整雪花的大小界限来降低高度。是的,这就是问题所在,当我改变它显示的顺序时,就像这样。但我需要将视图添加到另一个视图的顶部。我该怎么做?@Isuru:当你说top时,你的意思是你想让SnowFallView显示在屏幕的顶部,而下面的TextView显示在你显示的图像的对面吗?或者你是说覆盖雪景的文本视图?可以通过使用FrameLayout而不是LinearLayout并最后添加TextView来实现这一点。FrameLayout将“分层”添加到其中的视图。不过,您需要在TextView上设置垂直填充以正确定位它。
countDownView = new TextView(context);
countDownView.setText("It's working");
addContentView(countDownView, null);