NestedScrollView无法转换为android.support.constraint.ConstraintLayout

时间:2019-04-08 22:20:28

标签: java android android-layout

我在ScrollView中有ConstraintLayout。 我正在尝试使用ConstraintLayout动画。它可以在ScrollView之外完美地工作,但是当我想在ScrollView中使用它时,AndroidStudio会说:

android.support.v4.widget.NestedScrollView cannot be cast to android.support.constraint.ConstraintLayout

我知道它是因为我的根布局是ScrollView,但我不知道如何解决这个问题。

我尝试在ScrollView之前添加另一个ConstraintLayout,这一次APP正常运行,但是当我按下按钮时却什么也没发生。

<android.support.v4.widget.NestedScrollView 
android:id="@+id/scrollView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<android.support.constraint.ConstraintLayout
    android:id="@+id/const1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/background_light"
    tools:context=".MainActivity">

这就是我在MainActivity中所做的

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(this, R.layout.activity_main_animation);
ChangeBounds transition = new ChangeBounds();
transition.setInterpolator(new AnticipateInterpolator(1.0f));
transition.setDuration(1200);
TransitionManager.beginDelayedTransition(cc1, transition);
constraintSet.applyTo(cc1);

2 个答案:

答案 0 :(得分:0)

如果您不介意为视图中的所有布局更改设置动画,则可以尝试以下方法。添加起来很简单,看看它是否适合您的用例。添加:

const withConfig = Comp => props => (
  <Config.Consumer>{config => <Comp config={config} {...props} />}</Config.Consumer>
);
@connect(...)
@withConfig
class someNestedComponent extends Component {
  componentDidMount() {
    console.log(this.props.config);
  }
  ...
}

转到NestedScrollView,然后关闭所有转换。每当您更改视图范围或在屏幕上或屏幕外添加新内容时,android都会自动处理动画。同样,您无法控制动画的速度等YMMV,但是值得一试。

答案 1 :(得分:0)

更改以下代码

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(this, R.layout.activity_main_animation); //this line need to be changed to 
constraintSet.clone(this, const1);// Pass id of ConstraintLayout for cloning as root layout of your xml file is not a ConstraintLayout.