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);
}
});
}
}
来源:CSDN
作者:飞天猪°
链接:https://blog.csdn.net/FlyPig_Vip/article/details/104573252