本来今天不想写的,但是怕自己又忘记就写了,正好提醒自己周末改下,变成触摸可能会好点(但愿记得了))
好了介绍下bakerj
添加依赖
compile 'com.bakerj:infinite-cards:1.0.0'
地址
这里写链接内容
我懒得解释给个代码看吧,我周末会补写的(如果没忘的话)
package com.example.admin.bakerjq;
import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.view.animation.OvershootInterpolator;
import android.widget.BaseAdapter;
import android.widget.Button;
import com.bakerj.infinitecards.AnimationTransformer;
import com.bakerj.infinitecards.CardItem;
import com.bakerj.infinitecards.InfiniteCardView;
import com.bakerj.infinitecards.ZIndexTransformer;
import com.bakerj.infinitecards.transformer.DefaultCommonTransformer;
import com.bakerj.infinitecards.transformer.DefaultTransformerToBack;
import com.bakerj.infinitecards.transformer.DefaultTransformerToFront;
import com.bakerj.infinitecards.transformer.DefaultZIndexTransformerCommon;
import com.nineoldandroids.view.ViewHelper;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
private InfiniteCardView mCardView;
private BaseAdapter mAdapter1;
private int[] resId = {R.mipmap.pic1, R.mipmap.pic2, R.mipmap.pic3, R.mipmap
.pic4, R.mipmap.pic5};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mCardView = (InfiniteCardView) findViewById(R.id.view);
mAdapter1 = new MyAdapter(resId);
mCardView.setAdapter(mAdapter1);
Button pre= (Button) findViewById(R.id.pre);
Button next= (Button) findViewById(R.id.next);
pre.setOnClickListener(this);
next.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
//上一个
case R.id.pre:
setStyle1();
//设置显示数据源的第几个从0 开始
mCardView.bringCardToFront(mAdapter1.getCount() - 1);
break;
//下一个
case R.id.next:
setStyle3();
mCardView.bringCardToFront(1);
break;
}
}
private void setStyle1() {
mCardView.setClickable(true);
mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_FRONT);
mCardView.setAnimInterpolator(new LinearInterpolator());
mCardView.setTransformerToFront(new DefaultTransformerToFront());
mCardView.setTransformerToBack(new DefaultTransformerToBack());
mCardView.setZIndexTransformerToBack(new DefaultZIndexTransformerCommon());
}
private void setStyle3() {
mCardView.setClickable(false);
mCardView.setAnimType(InfiniteCardView.ANIM_TYPE_FRONT_TO_LAST);
mCardView.setAnimInterpolator(new OvershootInterpolator(-8));
mCardView.setTransformerToFront(new DefaultCommonTransformer());
mCardView.setTransformerToBack(new AnimationTransformer() {
@Override
public void transformAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
int positionCount = fromPosition - toPosition;
float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
ViewHelper.setScaleX(view, scale);
ViewHelper.setScaleY(view, scale);
if (fraction < 0.5) {
ViewCompat.setTranslationX(view, cardWidth * fraction * 1.5f);
ViewCompat.setRotationY(view, -45 * fraction);
} else {
ViewCompat.setTranslationX(view, cardWidth * 1.5f * (1f - fraction));
ViewCompat.setRotationY(view, -45 * (1 - fraction));
}
}
@Override
public void transformInterpolatedAnimation(View view, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
int positionCount = fromPosition - toPosition;
float scale = (0.8f - 0.1f * fromPosition) + (0.1f * fraction * positionCount);
ViewHelper.setTranslationY(view, -cardHeight * (0.8f - scale) * 0.5f - cardWidth * (0.02f *
fromPosition - 0.02f * fraction * positionCount));
}
});
mCardView.setZIndexTransformerToBack(new ZIndexTransformer() {
@Override
public void transformAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
if (fraction < 0.5f) {
card.zIndex = 1f + 0.01f * fromPosition;
} else {
card.zIndex = 1f + 0.01f * toPosition;
}
}
@Override
public void transformInterpolatedAnimation(CardItem card, float fraction, int cardWidth, int cardHeight, int fromPosition, int toPosition) {
}
});
}
}
xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:infiniteCard="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main2"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.bakerjq.Main2Activity">
<com.bakerj.infinitecards.InfiniteCardView
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="match_parent"
infiniteCard:animDuration="1000"
infiniteCard:cardRatio="1"/>
<LinearLayout
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="50dp"
android:orientation="horizontal">
<Button
android:id="@+id/pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="pre"/>
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="next"/>
</LinearLayout>
</RelativeLayout>
ok
效果不错拿出来分享下,督促自己看看人家源码改下(当然周末有空的话( ⊙ o ⊙ )!)