2

我通常更喜欢使用类而不是 XML。

现在这是创建场景的普通方法:

TransitionInflater inflater = TransitionInflater.from(this);

ViewGroup mSceneRoot = (ViewGroup) findViewById(R.id.sceneRoot);
Scene mScene2 = Scene.getSceneForLayout(mSceneRoot, R.layout.transition_event,this);

TransitionManager mTransitionManager = inflater.inflateTransitionManager(R.anim.transitions_mgr, mSceneRoot);
mTransitionManager.transitionTo(mScene2);

挺整洁的。由于R.layout.transition_event它只是一个 TextView,因此它创建了以下布局。LinearLayout 是根。

在此处输入图像描述

为了使事情以编程方式发生,我们可以使用Scene(ViewGroup sceneRoot, ViewGroup layout)构造函数而不是Scene.getSceneForLayout(..).

我的问题是ViewGroup layout参数。因为我只想有一个文本视图,如果我创建一个 FrameLayout 并添加文本视图,这将创建一个额外的视图,如上面的屏幕截图,这是不一样的。

我要么需要类似<merge/>但以编程方式的东西,要么需要将 TextView“转换”为 ViewGroup。

这是我迄今为止最好的尝试:

# I try to do the equivalent of .getSceneForLayout() here
ViewGroup vg = new ViewGroup(MainActivity.this) {
    @Override
     protected void onLayout(boolean b, int i, int i2, int i3, int i4) {
     }
};

TextView tv = new TextView(MainActivity.this);
tv.setText("YOLO!");
vg.addView(tv,0);

mScene2 = new Scene(mSceneRoot, vg);

顺便说一句,哪个产生:

在此处输入图像描述

不确定是否值得喧嚣,但我想弄清楚这一点。

4

0 回答 0