1.效果图
2.需求就是点击item歌曲时,实现一种飞入到预约按钮处的效果
3.思路:在布局文件中加入了一个条目布局,和listView的item一样,点击listView的item时,使用给条目布局执行动画。
code:
xml布局
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/recycleView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:gravity="center" android:text="this is a songfragment" android:textSize="21sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:id="@+id/anim_layout" android:gravity="center_vertical" android:orientation="horizontal"> <RelativeLayout android:layout_width="50dp" android:layout_height="50dp"> <com.multak.cookaraclient.RippleImageView android:id="@+id/anim_typeImage" android:layout_width="40dp" android:layout_height="40dp" android:scaleType="centerCrop" android:layout_centerInParent="true" /> <ImageView android:id="@+id/anim_imageLike" android:layout_alignParentRight="true" android:layout_height="15dp" android:visibility="gone" android:layout_width="15dp"/> </RelativeLayout> <ImageView android:id="@+id/image_SongTitle" android:layout_width="50dp" android:layout_height="50dp" android:clickable="true" android:src="@mipmap/mp3" android:visibility="gone" /> <LinearLayout android:id="@+id/layout" android:layout_width="0dp" android:layout_height="50dp" android:layout_marginLeft="@dimen/imagemagintext" android:layout_weight="1" android:orientation="vertical"> <TextView android:id="@+id/anim_textView_SongName" android:layout_width="match_parent" android:layout_height="30dp" android:paddingTop="5dp" android:textColor="@color/colorSongName" android:textSize="@dimen/songnamesize" /> <TextView android:id="@+id/anim_textView_SongSinger" android:layout_width="match_parent" android:layout_height="20dp" android:textColor="@color/colorSongName" android:textSize="@dimen/songsingersize" /> </LinearLayout> <RelativeLayout android:layout_width="50dp" android:layout_height="50dp"> <com.multak.cookaraclient.RippleImageView android:id="@+id/image_SongPro" android:layout_width="30dp" android:layout_height="30dp" android:visibility="gone" android:layout_centerInParent="true" android:src="@mipmap/favono" /> </RelativeLayout> </LinearLayout> </RelativeLayout>
code: 给条目布局赋值数据
/*** 加个预约动画 */ String anim_SongName=ClickSongIndex.getSongName(); String anim_SingerName=ClickSongIndex.getSingerName(); anim_textView_SongName.setText(anim_SongName); anim_textView_SongSinger.setText(anim_SingerName); int anim_Type=ClickSongIndex.getFileType(); if(anim_Type==3){ anim_typeImage.setImageResource(R.mipmap.mtv1); }else if(anim_Type==4){ anim_typeImage.setImageResource(R.mipmap.circle1); }else if(anim_Type==5){ anim_typeImage.setImageResource(R.mipmap.movie1); }else{ anim_typeImage.setImageResource(R.mipmap.midi1); } if(listFavo.contains(ClickSongIndex.getSongIndex())){ anim_imageLike.setVisibility(View.VISIBLE); }else{ anim_imageLike.setVisibility(View.GONE); } if(MainActivity.DayOrNight==1){ anim_typeImage.ChangeColor(context.getResources().getColor(R.color.lightStyle_TextColor)); }else{ anim_typeImage.ChangeColor(context.getResources().getColor(R.color.darkStyle_TextColor)); } itemClickOrderAnim(anim_layout,FromX,FromY,Max_X,Max_Y); /*** 预约动画结束*/
code:执行动画
private void itemClickOrderAnim(LinearLayout layout,int fromX,int fromY,int toX,int toY){ ObjectAnimator animator1 = ObjectAnimator.ofFloat(layout, View.ALPHA, 1, 0); ObjectAnimator animator2 = ObjectAnimator.ofFloat(layout, "translationY", fromY-240, toY); ObjectAnimator animator3 = ObjectAnimator.ofFloat(layout, "translationX", fromX, toX); ObjectAnimator animator4 = ObjectAnimator.ofFloat(layout,"scaleY",1f,0f); ObjectAnimator animator5 = ObjectAnimator.ofFloat(layout,"scaleX",1f,0f); AnimatorSet set = new AnimatorSet(); set.playTogether( animator2, animator3,animator4,animator5); set.setDuration(1200); set.start(); }
示例:
https://pan.baidu.com/s/1bN2cJ8
时间: 2024-10-20 21:21:44