diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 54cbce4..ea20013 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,21 +1,22 @@
+ package="com.zhy.magicviewpager.sample">
+ android:theme="@style/AppTheme">
+ android:label="@string/app_name">
+
diff --git a/app/src/main/java/com/zhy/magicviewpager/sample/MainActivity.java b/app/src/main/java/com/zhy/magicviewpager/sample/MainActivity.java
index 93046cf..18c37b4 100644
--- a/app/src/main/java/com/zhy/magicviewpager/sample/MainActivity.java
+++ b/app/src/main/java/com/zhy/magicviewpager/sample/MainActivity.java
@@ -1,5 +1,6 @@
package com.zhy.magicviewpager.sample;
+import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
@@ -118,6 +119,9 @@ public boolean onOptionsItemSelected(MenuItem item)
}else if ("RotateDown and Alpha And ScaleIn".equals(title))
{
mViewPager.setPageTransformer(true, new RotateDownPageTransformer(new AlphaPageTransformer(new ScaleInTransformer())));
+ }else if ("Add Transform Can Vertical Scroll".equals(title))
+ {
+ startActivity(new Intent(MainActivity.this,SupportScrollActivity.class));
}
setTitle(title);
diff --git a/app/src/main/java/com/zhy/magicviewpager/sample/ScrollFragment.java b/app/src/main/java/com/zhy/magicviewpager/sample/ScrollFragment.java
new file mode 100644
index 0000000..7edc88a
--- /dev/null
+++ b/app/src/main/java/com/zhy/magicviewpager/sample/ScrollFragment.java
@@ -0,0 +1,103 @@
+package com.zhy.magicviewpager.sample;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+
+/**
+ * usage:
+ * author: kHRYSTAL
+ * create time: 16/5/7
+ * update time:
+ * email: 723526676@qq.com
+ */
+public class ScrollFragment extends Fragment{
+
+ public static Fragment getInstance() {
+ ScrollFragment fragment = new ScrollFragment();
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.scroll_fragment, container, false);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initView(view);
+ }
+
+ private void initView(View view) {
+ ListView listView = (ListView)view.findViewById(R.id.list_view);
+ ArrayList list = new ArrayList<>();
+ for (int i = 0; i < 100; i++) {
+ list.add(""+i);
+ }
+ SimpleAdapter adapter = new SimpleAdapter(getContext(),list);
+ listView.setAdapter(adapter);
+ adapter.notifyDataSetChanged();
+
+ }
+
+ public class SimpleAdapter extends BaseAdapter {
+
+ private ArrayList list;
+ private Context context;
+
+ public SimpleAdapter(Context context,ArrayList list){
+ this.list = list;
+ this.context = context;
+ }
+
+ @Override
+ public int getCount() {
+ return list.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return list.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder = null;
+ if (convertView == null) {
+ convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, null);
+ holder = new ViewHolder();
+ holder.textView = (TextView)convertView.findViewById(R.id.text);
+ convertView.setTag(holder);
+ } else {
+ holder = (ViewHolder)convertView.getTag();
+ }
+ holder.textView.setText(list.get(position));
+ return convertView;
+ }
+ }
+
+ public class ViewHolder{
+ public TextView textView;
+ }
+}
diff --git a/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
new file mode 100644
index 0000000..accb4ab
--- /dev/null
+++ b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
@@ -0,0 +1,70 @@
+package com.zhy.magicviewpager.sample;
+
+import android.support.v4.app.FragmentTransaction;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+
+public class SupportScrollActivity extends AppCompatActivity {
+
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.support_scroll_activity);
+ }
+
+
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu)
+ {
+ String[] effects = this.getResources().getStringArray(R.array.magic_effect);
+ for (String effect : effects)
+ menu.add(effect);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item)
+ {
+ String title = item.getTitle().toString();
+ FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
+ Bundle bundle = new Bundle();
+ if ("RotateDown".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,2);
+ } else if ("RotateUp".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,3);
+ } else if ("RotateY".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,4);
+ } else if ("Standard".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,0);
+ } else if ("Alpha".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,1);
+ } else if ("ScaleIn".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,5);
+ } else if ("RotateDown and Alpha".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,6);
+ }else if ("RotateDown and Alpha And ScaleIn".equals(title))
+ {
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,7);
+ }else if ("Add Transform Can Vertical Scroll".equals(title))
+ {
+ onBackPressed();
+ }
+ fragmentTransaction.replace(R.id.fragment_container,SupportScrollFragment.getInstance(bundle));
+ fragmentTransaction.commit();
+ setTitle(title);
+ return true;
+ }
+}
diff --git a/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollFragment.java b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollFragment.java
new file mode 100644
index 0000000..18594a2
--- /dev/null
+++ b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollFragment.java
@@ -0,0 +1,124 @@
+package com.zhy.magicviewpager.sample;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.zhy.magicviewpager.transformer.AlphaPageTransformer;
+import com.zhy.magicviewpager.transformer.RotateDownPageTransformer;
+import com.zhy.magicviewpager.transformer.ScaleInTransformer;
+import com.zhy.magicviewpager.widget.MagicViewPager;
+import com.zhy.magicviewpager.widget.TransformType;
+
+import java.util.ArrayList;
+
+/**
+ * usage:
+ * author: kHRYSTAL
+ * create time: 16/5/7
+ * update time:
+ * email: 723526676@qq.com
+ */
+public class SupportScrollFragment extends Fragment{
+
+ public static final String TRANSFORM_TYPE = "transform_type";
+
+ private ArrayList list;
+ private MagicViewPager mViewPager;
+ private SimplePagerAdapter mAdapter;
+ private static int mTransformType;
+
+
+ public static Fragment getInstance(Bundle bundle) {
+ SupportScrollFragment fragment = new SupportScrollFragment();
+ mTransformType = bundle.getInt(TRANSFORM_TYPE);
+ return fragment;
+ }
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.support_scroll_fragment,container,false);
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ initView(view);
+ }
+
+ private void initView(View view) {
+ mViewPager = (MagicViewPager)view.findViewById(R.id.viewpager);
+ list = new ArrayList<>();
+ mAdapter = new SimplePagerAdapter(getChildFragmentManager());
+
+ mViewPager.setAdapter(mAdapter);
+ mViewPager.setMagicPagerMargin(20);
+ setTransForm(mTransformType);
+ }
+
+ private void setTransForm(int type) {
+ Log.e("SupportFragment",""+type);
+ switch (type){
+ case 0:
+ mViewPager.setTransformType(TransformType.NON_PAGETRANSFORMER);
+ break;
+ case 1:
+ mViewPager.setTransformType(TransformType.ALPHA_PAGETRANSFORMER);
+ break;
+ case 2:
+ mViewPager.setTransformType(TransformType.ROATE_DOWN_PAGETRANSFORMER);
+ break;
+ case 3:
+ mViewPager.setTransformType(TransformType.ROATE_UP_PAGETRANSFORMER);
+ break;
+ case 4:
+ mViewPager.setTransformType(TransformType.ROTATE_Y_TRANSFORMER);
+ break;
+ case 5:
+ mViewPager.setTransformType(TransformType.SCALE_IN_TRANSFORMER);
+ break;
+ case 6:
+ mViewPager.setPageTransformer(new RotateDownPageTransformer(new AlphaPageTransformer()));
+ break;
+ case 7:
+ mViewPager.setPageTransformer(new RotateDownPageTransformer(new AlphaPageTransformer(new ScaleInTransformer())));
+
+ break;
+ }
+ }
+
+ public class SimplePagerAdapter extends FragmentPagerAdapter {
+
+
+ public SimplePagerAdapter(FragmentManager fm) {
+ super(fm);
+ Log.e("SimplePagerAdapter","init");
+ }
+
+ @Override
+ public int getCount() {
+ return 5;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ return super.instantiateItem(container, position);
+ }
+
+ @Override
+ public void destroyItem(ViewGroup container, int position, Object object) {
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return ScrollFragment.getInstance();
+ }
+ }
+}
diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml
new file mode 100644
index 0000000..774998f
--- /dev/null
+++ b/app/src/main/res/layout/list_item.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/scroll_fragment.xml b/app/src/main/res/layout/scroll_fragment.xml
new file mode 100644
index 0000000..45426ca
--- /dev/null
+++ b/app/src/main/res/layout/scroll_fragment.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/support_scroll_activity.xml b/app/src/main/res/layout/support_scroll_activity.xml
new file mode 100644
index 0000000..2291427
--- /dev/null
+++ b/app/src/main/res/layout/support_scroll_activity.xml
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/support_scroll_fragment.xml b/app/src/main/res/layout/support_scroll_fragment.xml
new file mode 100644
index 0000000..11e6472
--- /dev/null
+++ b/app/src/main/res/layout/support_scroll_fragment.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 933f2f8..a9ba245 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,6 +13,7 @@
- ScaleIn
- RotateDown and Alpha
- RotateDown and Alpha And ScaleIn
+ - Add Transform Can Vertical Scroll
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index 2255014..acf5e61 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -1,5 +1,5 @@
+ package="com.zhy.magicviewpager">
diff --git a/library/src/main/java/com/zhy/magicviewpager/transformer/AlphaPageTransformer.java b/library/src/main/java/com/zhy/magicviewpager/transformer/AlphaPageTransformer.java
index 985eeb9..11e6f14 100644
--- a/library/src/main/java/com/zhy/magicviewpager/transformer/AlphaPageTransformer.java
+++ b/library/src/main/java/com/zhy/magicviewpager/transformer/AlphaPageTransformer.java
@@ -2,6 +2,7 @@
import android.annotation.TargetApi;
import android.os.Build;
+import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
@@ -35,21 +36,25 @@ public void pageTransform(View view, float position)
{
if (position < -1)
{ // [-Infinity,-1)
- view.setAlpha(mMinAlpha);
+// view.setAlpha(mMinAlpha);
+ ViewCompat.setAlpha(view,mMinAlpha);
} else if (position <= 1)
{ // [-1,1]
if (position < 0) //[0,-1]
{ //[1,min]
- view.setAlpha(mMinAlpha + (1 - mMinAlpha) * (1 + position));
+// view.setAlpha(mMinAlpha + (1 - mMinAlpha) * (1 + position));
+ ViewCompat.setAlpha(view,mMinAlpha + (1 - mMinAlpha) * (1 + position));
} else//[1,0]
{
//[min,1]
- view.setAlpha(mMinAlpha + (1 - mMinAlpha) * (1 - position));
+// view.setAlpha(mMinAlpha + (1 - mMinAlpha) * (1 - position));
+ ViewCompat.setAlpha(view,mMinAlpha + (1 - mMinAlpha) * (1 - position));
}
} else
{ // (1,+Infinity]
- view.setAlpha(mMinAlpha);
+// view.setAlpha(mMinAlpha);
+ ViewCompat.setAlpha(view,mMinAlpha + (1 - mMinAlpha) * (1 - position));
}
}
}
diff --git a/library/src/main/java/com/zhy/magicviewpager/transformer/RotateDownPageTransformer.java b/library/src/main/java/com/zhy/magicviewpager/transformer/RotateDownPageTransformer.java
index 66d0bcf..c6c1234 100644
--- a/library/src/main/java/com/zhy/magicviewpager/transformer/RotateDownPageTransformer.java
+++ b/library/src/main/java/com/zhy/magicviewpager/transformer/RotateDownPageTransformer.java
@@ -2,6 +2,7 @@
import android.annotation.TargetApi;
import android.os.Build;
+import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
@@ -37,30 +38,43 @@ public void pageTransform(View view, float position)
if (position < -1)
{ // [-Infinity,-1)
// This page is way off-screen to the left.
- view.setRotation(mMaxRotate * -1);
- view.setPivotX(view.getWidth());
- view.setPivotY(view.getHeight());
+// view.setRotation(mMaxRotate * -1);
+// view.setPivotX(view.getWidth());
+// view.setPivotY(view.getHeight());
+ ViewCompat.setRotation(view,mMaxRotate * -1);
+ ViewCompat.setPivotX(view,view.getWidth());
+ ViewCompat.setPivotY(view,view.getHeight());
} else if (position <= 1)
{ // [-1,1]
if (position < 0)//[0,-1]
{
- view.setPivotX(view.getWidth() * (DEFAULT_CENTER + DEFAULT_CENTER * (-position)));
- view.setPivotY(view.getHeight());
- view.setRotation(mMaxRotate * position);
+// view.setPivotX(view.getWidth() * (DEFAULT_CENTER + DEFAULT_CENTER * (-position)));
+// view.setPivotY(view.getHeight());
+// view.setRotation(mMaxRotate * position);
+ ViewCompat.setRotation(view,view.getWidth() * (DEFAULT_CENTER + DEFAULT_CENTER * (-position)));
+ ViewCompat.setPivotY(view,view.getHeight());
+ ViewCompat.setRotation(view,mMaxRotate * position);
+
} else//[1,0]
{
- view.setPivotX(view.getWidth() * DEFAULT_CENTER * (1 - position));
- view.setPivotY(view.getHeight());
- view.setRotation(mMaxRotate * position);
+// view.setPivotX(view.getWidth() * DEFAULT_CENTER * (1 - position));
+// view.setPivotY(view.getHeight());
+// view.setRotation(mMaxRotate * position);
+ ViewCompat.setPivotX(view,view.getWidth() * DEFAULT_CENTER * (1 - position));
+ ViewCompat.setPivotY(view,view.getHeight());
+ ViewCompat.setRotation(view,mMaxRotate * position);
}
} else
{ // (1,+Infinity]
// This page is way off-screen to the right.
- view.setRotation(mMaxRotate);
- view.setPivotX(view.getWidth() * 0);
- view.setPivotY(view.getHeight());
+// view.setRotation(mMaxRotate);
+// view.setPivotX(view.getWidth() * 0);
+// view.setPivotY(view.getHeight());
+ ViewCompat.setRotation(view,mMaxRotate);
+ ViewCompat.setPivotX(view,view.getWidth() * 0);
+ ViewCompat.setPivotY(view,view.getHeight());
}
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/zhy/magicviewpager/transformer/RotateUpPageTransformer.java b/library/src/main/java/com/zhy/magicviewpager/transformer/RotateUpPageTransformer.java
index 1496c2a..3591afa 100644
--- a/library/src/main/java/com/zhy/magicviewpager/transformer/RotateUpPageTransformer.java
+++ b/library/src/main/java/com/zhy/magicviewpager/transformer/RotateUpPageTransformer.java
@@ -2,6 +2,7 @@
import android.annotation.TargetApi;
import android.os.Build;
+import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
@@ -37,31 +38,44 @@ public void pageTransform(View view, float position)
if (position < -1)
{ // [-Infinity,-1)
// This page is way off-screen to the left.
- view.setRotation(mMaxRotate);
- view.setPivotX(view.getWidth());
- view.setPivotY(0);
+// view.setRotation(mMaxRotate);
+// view.setPivotX(view.getWidth());
+// view.setPivotY(0);
+ ViewCompat.setRotation(view,mMaxRotate);
+ ViewCompat.setPivotX(view,view.getWidth());
+ ViewCompat.setPivotY(view,0);
} else if (position <= 1) // a页滑动至b页 ; a页从 0.0 ~ -1 ;b页从1 ~ 0.0
{ // [-1,1]
// Modify the default slide transition to shrink the page as well
if (position < 0)//[0,-1]
{
- view.setPivotX(view.getWidth() * (0.5f + 0.5f * (-position)));
- view.setPivotY(0);
- view.setRotation(-mMaxRotate * position);
+// view.setPivotX(view.getWidth() * (0.5f + 0.5f * (-position)));
+// view.setPivotY(0);
+// view.setRotation(-mMaxRotate * position);
+
+ ViewCompat.setPivotX(view,view.getWidth() * (0.5f + 0.5f * (-position)));
+ ViewCompat.setPivotY(view,0);
+ ViewCompat.setRotation(view,-mMaxRotate * position);
} else//[1,0]
{
- view.setPivotX(view.getWidth() * 0.5f * (1 - position));
- view.setPivotY(0);
- view.setRotation(-mMaxRotate * position);
+// view.setPivotX(view.getWidth() * 0.5f * (1 - position));
+// view.setPivotY(0);
+// view.setRotation(-mMaxRotate * position);
+ ViewCompat.setPivotX(view,view.getWidth() * 0.5f * (1 - position));
+ ViewCompat.setPivotY(view,0);
+ ViewCompat.setRotation(view,-mMaxRotate * position);
}
} else
{ // (1,+Infinity]
// This page is way off-screen to the right.
// ViewHelper.setRotation(view, ROT_MAX);
- view.setRotation(-mMaxRotate);
- view.setPivotX(0);
- view.setPivotY(0);
+// view.setRotation(-mMaxRotate);
+// view.setPivotX(0);
+// view.setPivotY(0);
+ ViewCompat.setRotation(view,-mMaxRotate);
+ ViewCompat.setPivotY(view,0);
+ ViewCompat.setPivotY(view,0);
}
}
}
\ No newline at end of file
diff --git a/library/src/main/java/com/zhy/magicviewpager/transformer/RotateYTransformer.java b/library/src/main/java/com/zhy/magicviewpager/transformer/RotateYTransformer.java
index e9ac808..5cee189 100644
--- a/library/src/main/java/com/zhy/magicviewpager/transformer/RotateYTransformer.java
+++ b/library/src/main/java/com/zhy/magicviewpager/transformer/RotateYTransformer.java
@@ -2,6 +2,7 @@
import android.annotation.TargetApi;
import android.os.Build;
+import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
@@ -38,31 +39,40 @@ public void pageTransform(View view, float position)
if (position < -1)
{ // [-Infinity,-1)
// This page is way off-screen to the left.
- view.setRotationY(-1 * mMaxRotate);
- view.setPivotX(view.getWidth());
- view.setPivotX(view.getWidth());
+// view.setRotationY(-1 * mMaxRotate);
+// view.setPivotX(view.getWidth());
+// view.setPivotX(view.getWidth());
+ ViewCompat.setRotationY(view,-1 * mMaxRotate);
+ ViewCompat.setPivotX(view,view.getWidth());
+ ViewCompat.setPivotX(view,view.getWidth());
} else if (position <= 1)
{ // [-1,1]
// Modify the default slide transition to shrink the page as well
- view.setRotationY(position * mMaxRotate);
-
+// view.setRotationY(position * mMaxRotate);
+ ViewCompat.setRotationY(view,position * mMaxRotate);
if (position < 0)//[0,-1]
{
- view.setPivotX(view.getWidth() * (DEFAULT_CENTER + DEFAULT_CENTER * (-position)));
- view.setPivotX(view.getWidth());
+// view.setPivotX(view.getWidth() * (DEFAULT_CENTER + DEFAULT_CENTER * (-position)));
+// view.setPivotX(view.getWidth());
+ ViewCompat.setPivotX(view,view.getWidth() * (DEFAULT_CENTER + DEFAULT_CENTER * (-position)));
+ ViewCompat.setPivotX(view,view.getWidth());
} else//[1,0]
{
- view.setPivotX(view.getWidth() * DEFAULT_CENTER * (1 - position));
- view.setPivotX(0);
+// view.setPivotX(view.getWidth() * DEFAULT_CENTER * (1 - position));
+// view.setPivotX(0);
+ ViewCompat.setPivotX(view,view.getWidth() * DEFAULT_CENTER * (1 - position));
+ ViewCompat.setPivotX(view,0);
}
// Scale the page down (between MIN_SCALE and 1)
} else
{ // (1,+Infinity]
// This page is way off-screen to the right.
- view.setRotationY(1 * mMaxRotate);
- view.setPivotX(0);
+// view.setRotationY(1 * mMaxRotate);
+// view.setPivotX(0);
+ ViewCompat.setRotationY(view, 1 * mMaxRotate);
+ ViewCompat.setPivotY(view,0);
}
}
}
diff --git a/library/src/main/java/com/zhy/magicviewpager/transformer/ScaleInTransformer.java b/library/src/main/java/com/zhy/magicviewpager/transformer/ScaleInTransformer.java
index d4b2210..d72edbf 100644
--- a/library/src/main/java/com/zhy/magicviewpager/transformer/ScaleInTransformer.java
+++ b/library/src/main/java/com/zhy/magicviewpager/transformer/ScaleInTransformer.java
@@ -2,6 +2,7 @@
import android.annotation.TargetApi;
import android.os.Build;
+import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;
@@ -39,14 +40,21 @@ public void pageTransform(View view, float position)
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
- view.setPivotY(pageHeight / 2);
- view.setPivotX(pageWidth / 2);
+// view.setPivotY(pageHeight / 2);
+// view.setPivotX(pageWidth / 2);
+ ViewCompat.setPivotY(view,pageHeight / 2);
+ ViewCompat.setPivotX(view,pageWidth /2);
+
if (position < -1)
{ // [-Infinity,-1)
// This page is way off-screen to the left.
- view.setScaleX(mMinScale);
- view.setScaleY(mMinScale);
- view.setPivotX(pageWidth);
+// view.setScaleX(mMinScale);
+// view.setScaleY(mMinScale);
+// view.setPivotX(pageWidth);
+ ViewCompat.setScaleX(view,mMinScale);
+ ViewCompat.setScaleY(view,mMinScale);
+ ViewCompat.setPivotX(view,pageWidth);
+
} else if (position <= 1)
{ // [-1,1]
// Modify the default slide transition to shrink the page as well
@@ -54,25 +62,35 @@ public void pageTransform(View view, float position)
{
float scaleFactor = (1 + position) * (1 - mMinScale) + mMinScale;
- view.setScaleX(scaleFactor);
- view.setScaleY(scaleFactor);
+// view.setScaleX(scaleFactor);
+// view.setScaleY(scaleFactor);
+//
+// view.setPivotX(pageWidth * (DEFAULT_CENTER + (DEFAULT_CENTER * -position)));
- view.setPivotX(pageWidth * (DEFAULT_CENTER + (DEFAULT_CENTER * -position)));
+ ViewCompat.setScaleX(view,scaleFactor);
+ ViewCompat.setScaleY(view,scaleFactor);
+ ViewCompat.setPivotX(view,pageWidth * (DEFAULT_CENTER + (DEFAULT_CENTER * -position)));
} else //1-2:2[1,0] ;2-1:2[0,1]
{
float scaleFactor = (1 - position) * (1 - mMinScale) + mMinScale;
- view.setScaleX(scaleFactor);
- view.setScaleY(scaleFactor);
- view.setPivotX(pageWidth * ((1 - position) * DEFAULT_CENTER));
+// view.setScaleX(scaleFactor);
+// view.setScaleY(scaleFactor);
+// view.setPivotX(pageWidth * ((1 - position) * DEFAULT_CENTER));
+ ViewCompat.setScaleX(view,scaleFactor);
+ ViewCompat.setScaleY(view,scaleFactor);
+ ViewCompat.setPivotX(view,pageWidth * ((1 - position) * DEFAULT_CENTER));
}
} else
{ // (1,+Infinity]
- view.setPivotX(0);
- view.setScaleX(mMinScale);
- view.setScaleY(mMinScale);
+// view.setPivotX(0);
+// view.setScaleX(mMinScale);
+// view.setScaleY(mMinScale);
+ ViewCompat.setPivotX(view,0);
+ ViewCompat.setScaleX(view,mMinScale);
+ ViewCompat.setScaleY(view,mMinScale);
}
}
}
diff --git a/library/src/main/java/com/zhy/magicviewpager/widget/Hacky.java b/library/src/main/java/com/zhy/magicviewpager/widget/Hacky.java
new file mode 100644
index 0000000..0326ff1
--- /dev/null
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/Hacky.java
@@ -0,0 +1,59 @@
+package com.zhy.magicviewpager.widget;
+
+import android.content.Context;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+/**
+ * usage:
+ * author: kHRYSTAL
+ * create time: 16/5/7
+ * update time:
+ * email: 723526676@qq.com
+ */
+public class Hacky extends ViewPager{
+
+ private boolean isLocked;
+
+ public Hacky(Context context) {
+ super(context);
+ isLocked = false;
+ }
+
+ public Hacky(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ isLocked = false;
+ }
+
+ @Override
+ public boolean onInterceptHoverEvent(MotionEvent event) {
+ if (!isLocked){
+ try {
+ return super.onInterceptHoverEvent(event);
+ }catch (IllegalArgumentException e){
+ e.printStackTrace();
+ return false;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ return !isLocked && super.onTouchEvent(ev);
+ }
+
+ public void toggleLock(){
+ isLocked = !isLocked;
+ }
+
+ public void setLocked(boolean isLocked){
+ this.isLocked = isLocked;
+ }
+
+ public boolean isLocked(){
+ return isLocked;
+ }
+
+}
diff --git a/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java b/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
new file mode 100644
index 0000000..bcdb176
--- /dev/null
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
@@ -0,0 +1,232 @@
+package com.zhy.magicviewpager.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Point;
+import android.os.Build;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.view.ViewPager;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import com.zhy.magicviewpager.R;
+import com.zhy.magicviewpager.transformer.AlphaPageTransformer;
+import com.zhy.magicviewpager.transformer.BasePageTransformer;
+import com.zhy.magicviewpager.transformer.NonPageTransformer;
+import com.zhy.magicviewpager.transformer.RotateDownPageTransformer;
+import com.zhy.magicviewpager.transformer.RotateUpPageTransformer;
+import com.zhy.magicviewpager.transformer.RotateYTransformer;
+import com.zhy.magicviewpager.transformer.ScaleInTransformer;
+
+/**
+ * usage: 当ViewPager中Fragment需要纵向滑动 同时需要加入transform时 使用该类
+ * author: kHRYSTAL
+ * create time: 16/5/7
+ * update time:
+ * email: 723526676@qq.com
+ */
+@SuppressWarnings("ResourceType")
+public class MagicViewPager extends FrameLayout implements OnPageChangeListener{
+
+
+ private int mPagerMargin = 0;
+ private int mPaddingLeft = 130;
+ private int mPaddingRight = 130;
+ private int mPageLimit = 3;
+ @TransformType.TransformTypeChecker private int mTransformType = TransformType.NON_PAGETRANSFORMER;
+
+
+ private Hacky mPager;
+ boolean mNeedRedraw = false;
+ private Point mCenter = new Point();
+ private Point mInitialTouch = new Point();
+ private BasePageTransformer mPageTransformer;
+ private OnPageChangeListener mListener;
+
+
+ public MagicViewPager(Context context) {
+ this(context,null,0);
+ }
+
+ public MagicViewPager(Context context, AttributeSet attrs) {
+ this(context, attrs,0);
+ }
+
+ @SuppressWarnings("ResourceType")
+ public MagicViewPager(Context context,AttributeSet attrs,int defStyle){
+ super(context, attrs,defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs,
+ R.styleable.MagicViewPager);
+ mPageLimit = a.getInteger(
+ R.styleable.MagicViewPager_offscreenPageLimit, mPageLimit);
+ mPagerMargin = a.getInteger(R.styleable.MagicViewPager_pagerMargin,
+ mPagerMargin);
+ mPaddingLeft = a.getInteger(R.styleable.MagicViewPager_paddingLeft,
+ mPaddingLeft);
+ mPaddingRight = a.getInteger(R.styleable.MagicViewPager_paddingRight,
+ mPaddingRight);
+ mTransformType = a.getInteger(R.styleable.MagicViewPager_transformType,TransformType.NON_PAGETRANSFORMER);
+ a.recycle();
+ View.inflate(context,R.layout.magic_view_pager,this);
+ mPager = (Hacky) findViewById(R.id.real_page);
+ mPager.setOffscreenPageLimit(mPageLimit);
+ mPager.setPageMargin(mPagerMargin);
+ mPager.setOnPageChangeListener(this);
+ setDefaultTransform(mTransformType);
+ init(context);
+ }
+
+
+
+ public void setTransformType(@TransformType.TransformTypeChecker int type){
+ mTransformType = type;
+ setDefaultTransform(type);
+ }
+
+ private void setDefaultTransform(@TransformType.TransformTypeChecker int type) {
+ switch (type){
+ case TransformType.ALPHA_PAGETRANSFORMER:
+ mPageTransformer = new AlphaPageTransformer();
+ break;
+ case TransformType.ROATE_DOWN_PAGETRANSFORMER:
+ mPageTransformer = new RotateDownPageTransformer();
+ break;
+ case TransformType.ROATE_UP_PAGETRANSFORMER:
+ mPageTransformer = new RotateUpPageTransformer();
+ break;
+ case TransformType.ROTATE_Y_TRANSFORMER:
+ mPageTransformer = new RotateYTransformer();
+ break;
+ case TransformType.SCALE_IN_TRANSFORMER:
+ mPageTransformer = new ScaleInTransformer();
+ break;
+ default:
+ mPageTransformer = null;
+ break;
+ }
+ requestLayout();
+ }
+
+
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ private void init(Context context) {
+ setClipChildren(false);
+ if (Build.VERSION.SDK_INT >= 11)
+ setLayerType(View.LAYER_TYPE_SOFTWARE,null);
+ }
+
+ public Hacky getViewPager(){
+ return mPager;
+ }
+
+ public void setAdapter(PagerAdapter adapter){
+ if (mPager != null)
+ mPager.setAdapter(adapter);
+ else throw new NullPointerException("MagicViewPager's Hacky is null");
+ }
+
+ public void setMagicOffscreenPageLimit(int pagerDis) {
+ if (pagerDis < 3) {
+ throw new IllegalArgumentException(
+ "the offscreen page limit must >3");
+ }
+ if (mPager!=null)
+ mPager.setOffscreenPageLimit(pagerDis);
+ }
+
+ public void setMagicPagerMargin(int pagerMargin) {
+ mPager.setPageMargin(pagerMargin);
+ }
+
+ public void setPageTransformer(BasePageTransformer transformer) {
+ mPageTransformer = transformer;
+ }
+
+ public BasePageTransformer getPageTransformer() {
+ return mPageTransformer;
+ }
+
+ public void setOnPageChangeListener(OnPageChangeListener listener){
+ mListener = listener;
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ mCenter.x = w/2;
+ mCenter.y = h/2;
+ }
+
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ switch (event.getAction()){
+ case MotionEvent.ACTION_DOWN:
+ mInitialTouch.x = (int)event.getX();
+ mInitialTouch.y = (int)event.getY();
+ break;
+ default:
+ event.offsetLocation(mCenter.x - mInitialTouch.x,mCenter.y - mInitialTouch.y);
+ break;
+ }
+ return mPager.dispatchTouchEvent(event);
+ }
+
+
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ final int scrollX = mPager.getScrollX();
+ final int childCount = mPager.getChildCount();
+ if (mPageTransformer!=null) {
+ for (int i = 0; i < childCount; i++) {
+ final View child = mPager.getChildAt(i);
+ final ViewPager.LayoutParams lp = (ViewPager.LayoutParams) child.getLayoutParams();
+ if (lp.isDecor)
+ continue;
+ final float transformPos = (float) (child.getLeft() - scrollX) / child.getWidth();
+ mPageTransformer.transformPage(child, transformPos);
+ }
+ }else {
+ for (int i = 0; i < childCount; i++) {
+ final View child = mPager.getChildAt(i);
+ child.requestLayout();
+ }
+ }
+ if (mNeedRedraw)
+ invalidate();
+ if (mListener != null)
+ mListener.onPageScrolled(position,positionOffset,positionOffsetPixels);
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (mListener != null)
+ mListener.onPageSelected(position);
+
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ mNeedRedraw = (state != ViewPager.SCROLL_STATE_IDLE);
+ if (mListener != null)
+ mListener.onPageScrollStateChanged(state);
+ }
+
+
+ public interface OnPageChangeListener{
+
+ void onPageScrolled(int position,float positionOffset,int positionOffsetPixels);
+
+ void onPageSelected(int position);
+
+ void onPageScrollStateChanged(int state);
+ }
+}
diff --git a/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java b/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
new file mode 100644
index 0000000..3033be6
--- /dev/null
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
@@ -0,0 +1,46 @@
+package com.zhy.magicviewpager.widget;
+
+import android.support.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * usage: MagicViewPager的Transform类型
+ * author: kHRYSTAL
+ * create time: 16/5/7
+ * update time:
+ * email: 723526676@qq.com
+ */
+public class TransformType {
+ /**
+ * 多少种Transform类型
+ */
+ public static final int DEFAULT_TYPE_COUNT = 6;
+
+
+ @TransformTypeChecker
+ public static final int NON_PAGETRANSFORMER = 0;
+
+ @TransformTypeChecker
+ public static final int ALPHA_PAGETRANSFORMER = 1;
+
+ @TransformTypeChecker
+ public static final int ROATE_DOWN_PAGETRANSFORMER = 2;
+
+ @TransformTypeChecker
+ public static final int ROATE_UP_PAGETRANSFORMER = 3;
+
+ @TransformTypeChecker
+ public static final int ROTATE_Y_TRANSFORMER = 4;
+
+ @TransformTypeChecker
+ public static final int SCALE_IN_TRANSFORMER = 5;
+
+ @IntDef({NON_PAGETRANSFORMER,ALPHA_PAGETRANSFORMER,ROATE_DOWN_PAGETRANSFORMER,ROATE_UP_PAGETRANSFORMER,
+ ROTATE_Y_TRANSFORMER,SCALE_IN_TRANSFORMER})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface TransformTypeChecker{
+
+ }
+}
diff --git a/library/src/main/res/layout/magic_view_pager.xml b/library/src/main/res/layout/magic_view_pager.xml
new file mode 100644
index 0000000..0f735e0
--- /dev/null
+++ b/library/src/main/res/layout/magic_view_pager.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml
new file mode 100644
index 0000000..fc6089b
--- /dev/null
+++ b/library/src/main/res/values/attrs.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file