Github Android 图形变换

梦想与她 提交于 2020-03-01 22:03:15

 

https://github.com/skydoves/TransformationLayout

 

    implementation "com.github.skydoves:transformationlayout:1.0.1"
    implementation 'com.google.android.material:material:1.2.0-alpha05'
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46'

 

1.首先是一个View->View 的效果

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/root"
    tools:context=".MainActivity">

    <com.skydoves.transformationlayout.TransformationLayout
        android:id="@+id/tstlayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:transformation_duration="1500"
        app:transformation_targetView="@id/tv">

        <ImageView
            android:id="@+id/iv"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:src="@mipmap/ic_launcher" />


    </com.skydoves.transformationlayout.TransformationLayout>

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="60dp"
        android:layout_marginTop="180dp"
        android:background="#F00000"
        android:text="文字文字文字"
        android:textColor="#000"
        android:textSize="20sp" />

</LinearLayout>
public class MainActivity extends AppCompatActivity {


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

        final TransformationLayout tstlayout = findViewById(R.id.tstlayout);
        final LinearLayout root = findViewById(R.id.root);
        ImageView iv = findViewById(R.id.iv);
        TextView tv = findViewById(R.id.tv);

        iv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tstlayout.startTransform(root);
            }
        });


        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tstlayout.finishTransform(root);
            }
        });

    }
}

2.ToAc

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        TransitionExtensionKt.onTransformationStartContainer(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        TextView tv = findViewById(R.id.tv);
        final TransformationLayout tLayout = findViewById(R.id.tLayout);

        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Bundle bundle = tLayout.withActivity(MainActivity.this, "myTransitionName");
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                intent.putExtra("TransformationParams", tLayout.getParcelableParams());
                startActivity(intent, bundle);
            }
        });


    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <com.skydoves.transformationlayout.TransformationLayout
        android:id="@+id/tLayout"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="100dp"
        app:transformation_pathMode="linear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tv"
            android:background="#673AB7"
            android:gravity="center"
            android:text="A"
            android:layout_width="100dp"
            android:layout_height="100dp"/>

    </com.skydoves.transformationlayout.TransformationLayout>

</LinearLayout>
public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        TransformationLayout.Params params = getIntent().getParcelableExtra("TransformationParams");
        TransitionExtensionKt.onTransformationEndContainer(this, params);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);


    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/line"
    android:background="@color/colorAccent"
    android:fitsSystemWindows="false"
    tools:context=".Main2Activity">

    <TextView
        android:text="B"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

可以加RecyclerView

 

public class MyAdapter extends BaseQuickAdapter<String, BaseViewHolder> {

    public MyAdapter(int layoutResId, @Nullable List<String> data) {
        super(layoutResId, data);
    }

    @Override
    protected void convert(BaseViewHolder helper, String item) {
        helper.setText(R.id.tv_item, item);
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<com.skydoves.transformationlayout.TransformationLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tsl"
    android:layout_margin="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:background="#0F76F3"
    app:transformation_pathMode="arc">

    <TextView
        android:id="@+id/tv_item"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:textColor="#FFF"
        android:textSize="20sp" />

</com.skydoves.transformationlayout.TransformationLayout>

 

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        TransitionExtensionKt.onTransformationStartContainer(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView rv = findViewById(R.id.rv);

        List<String> list = new ArrayList<>();

        for (int i = 0; i < 30; i++) {
            list.add("我是第" + i + "条数据");
        }
        MyAdapter myAdapter = new MyAdapter(R.layout.item_text, list);

        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
        rv.setLayoutManager(gridLayoutManager);

        rv.setAdapter(myAdapter);
        myAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                TransformationLayout tsl = view.findViewById(R.id.tsl);
                Bundle bundle = tsl.withActivity(MainActivity.this, "myTransitionName" + position);
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                intent.putExtra("TransformationParams", tsl.getParcelableParams());
                startActivity(intent, bundle);
            }
        });


    }
}

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!