效果是这个样子滴
导入方法
- 首先在Gradle中添加一下代码
dependencies {
compile 'com.lorentzos.swipecards:library:X.X.X@aar'
}
- 在activity中添加一下代码
public class MyActivity_Simple extends Activity {
private ArrayList<String> al;
private ArrayAdapter<String> arrayAdapter;
private int i;
@InjectView(R.id.frame) SwipeFlingAdapterView flingContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ButterKnife.inject(this);
al = new ArrayList<>();
al.add("java");
al.add("html");
al.add("css");
al.add("javascript");
arrayAdapter = new ArrayAdapter<>(this, R.layout.item, R.id.helloText, al );
flingContainer.setAdapter(arrayAdapter);
flingContainer.setFlingListener(new SwipeFlingAdapterView.onFlingListener() {
@Override
public void removeFirstObjectInAdapter() {
// this is the simplest way to delete an object from the Adapter (/AdapterView)
al.remove(0);
arrayAdapter.notifyDataSetChanged();
}
@Override
public void onLeftCardExit(Object dataObject) {
//Do something on the left!
//You also have access to the original object.
//If you want to use it just cast it (String) dataObject
}
@Override
public void onRightCardExit(Object dataObject) {
}
@Override
public void onAdapterAboutToEmpty(int itemsInAdapter) {
}
@Override
public void onScroll(float scrollProgressPercent) {
}
});
}xml
}
- 在activity的XML文件中添加一下代码
<merge
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" >
<com.lorentzos.flingswipe.SwipeFlingAdapterView
android:id="@+id/frame"
android:background="#ffeee9e2"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:rotation_degrees="15.5"
tools:context=".MyActivity" />
</merge>
- 添加一个名为item.xml的文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_gravity="center"
android:layout_width="250dp"
android:layout_height="170dp">
<TextView
android:id="@+id/helloText"
android:textSize="40sp"
android:textColor="@android:color/white"
android:background="#E339"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<View
android:id="@+id/item_swipe_left_indicator"
android:alpha="0"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="10dp"
android:background="#A5F" />
<View
android:id="@+id/item_swipe_right_indicator"
android:alpha="0"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="10dp"
android:layout_gravity="right"
android:background="#5AF" />
</FrameLayout>
实现方法的介绍
1. 卡片的层叠效果:使用frameLayout
- 所有添加到这个布局中的视图都是以层叠的方式显示。
- 第一个添加到布局中视图显示在最底层,最后一个被放在最顶层。
- 上一层的视图会覆盖下一层的视图,因此该布局类似于堆栈布局。
- 默认对其方式是左上角对齐
- 若要设置子视图的位置,
- 要设置layout_gravity属性值。
2. 图片移动的动画,使用OnTouchListener,MotionEvent
一个简单的移动图片的例子
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
private int _xDelta;
private int _yDelta;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView j = (ImageView) findViewById(R.id.imageView);
j.setOnTouchListener(this);
}
public boolean onTouch(View view, MotionEvent event) {
final int X = (int) event.getRawX();
final int Y = (int) event.getRawY();
ImageView j = (ImageView) findViewById(R.id.imageView);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
_xDelta = (int) (X - j.getTranslationX());
_yDelta = (int) (Y - j.getTranslationY());
break;
case MotionEvent.ACTION_UP:
break;
case MotionEvent.ACTION_POINTER_DOWN:
break;
case MotionEvent.ACTION_POINTER_UP:
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
j.setTranslationX(X - _xDelta);
j.setTranslationY(Y - _yDelta);
break;
}
return true;
}
}
3. 使用线性回归来预测用户是否要去掉图片(Linear Regression)
如果不用线性回归的话,用户需要将图片移动到指定地点才行