如何在此刷卡中创建堆栈视图?

时间:2016-02-02 06:08:32

标签: android

我使用以下代码创建了一个滑动视图。这是我的java代码

package com.lorentzos.swipecards;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.Toast;

import com.lorentzos.flingswipe.SwipeFlingAdapterView;

import java.util.ArrayList;

import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;


public class MyActivity extends Activity {

private ArrayList<String> al;
private ArrayAdapter<String> arrayAdapter;
FrameLayout.LayoutParams params;
View v;

@InjectView(R.id.frame) SwipeFlingAdapterView flingContainer;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    /*frameLayout=(FrameLayout)v.findViewById(R.id.frame_layout);*/
    v=findViewById(R.id.frame_layout);
    ButterKnife.inject(this);

    /*al.add("c");
    al.add("python");
    al.add("java");
    al.add("html");
    al.add("c++");
    al.add("css");
    al.add("javascript");*/
    int height=500;
    int width=500;

    params = new FrameLayout.LayoutParams(width, height);
    /*params.gravity= Gravity.CENTER;*/

    al = new ArrayList<>();
    for(int i=0; i<=7; i++) {

        al.add("php");

        arrayAdapter = new ArrayAdapter<>(this, R.layout.item, R.id.helloText, al);

        flingContainer.setMaxVisible(4);

        /*v.setLayoutParams(params);*/
        flingContainer.setAdapter(arrayAdapter);
        height=height-20;
    }
    flingContainer.setFlingListener(new SwipeFlingAdapterView.onFlingListener() {
        @Override
        public void removeFirstObjectInAdapter() {
            // this is the simplest way to delete an object from the Adapter (/AdapterView)
            Log.d("LIST", "removed object!");
            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
            makeToast(MyActivity.this, "Left!");
        }

        @Override
        public void onRightCardExit(Object dataObject) {
            makeToast(MyActivity.this, "Right!");
        }

        @Override
        public void onAdapterAboutToEmpty(int itemsInAdapter) {
            // Ask for more data here
            /*al.add("XML ".concat(String.valueOf(i)));
            arrayAdapter.notifyDataSetChanged();
            Log.d("LIST", "notified");
            i++;*/
        }

        @Override
        public void onScroll(float scrollProgressPercent) {
            View view = flingContainer.getSelectedView();
            view.findViewById(R.id.item_swipe_right_indicator).setAlpha(scrollProgressPercent < 0 ? -scrollProgressPercent : 0);
            view.findViewById(R.id.item_swipe_left_indicator).setAlpha(scrollProgressPercent > 0 ? scrollProgressPercent : 0);
        }
    });


    // Optionally add an OnItemClickListener
    flingContainer.setOnItemClickListener(new SwipeFlingAdapterView.OnItemClickListener() {
        @Override
        public void onItemClicked(int itemPosition, Object dataObject) {
            makeToast(MyActivity.this, "Clicked!");
        }
    });

}

static void makeToast(Context ctx, String s){
    Toast.makeText(ctx, s, Toast.LENGTH_SHORT).show();
}


@OnClick(R.id.right)
public void right() {
    /**
     * Trigger the right event manually.
     */
    flingContainer.getTopCardListener().selectRight();
}

@OnClick(R.id.left)
public void left() {
    flingContainer.getTopCardListener().selectLeft();
}

}

以下是xml文件

activity_my.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"
    app:min_adapter_stack="6"
    tools:context=".MyActivity" />

<include layout="@layout/buttons" />

</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:id="@+id/frame_layout"
android:layout_gravity="center"
android:layout_width="200dp"
android:layout_height="200dp">

<TextView
    android:id="@+id/helloText"
    android:textSize="40sp"
    android:textColor="@android:color/white"
    android:background="#A5F"
    android:gravity="center"
    tools:text="@string/hello_world"
    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>

buttons.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginBottom="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<Button
    android:id="@+id/left"
    android:layout_margin="10dp"
    android:text="Left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/right"
    android:layout_margin="10dp"
    android:text="Right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

请参阅随附的屏幕截图。 enter image description here

[![enter image description here][2]][2]

但我希望图像像堆栈一样......不完全重叠。请参阅此enter image description here

任何人都可以帮助我实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

这是与您的解决方案https://github.com/Diolor/Swipecards

的链接

如果你在膨胀布局上使用自定义ArrayAdaper,这是适用于我的代码

inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.swipe_item, parent, false);