From 07949d4d9a318203e573895be093dcf97bd3139a Mon Sep 17 00:00:00 2001
From: kHRYSTAL <723526676@qq.com>
Date: Sat, 7 May 2016 16:49:07 +0800
Subject: [PATCH 1/3] add MagicViewPager support Fragment vertical scroll
---
app/src/main/AndroidManifest.xml | 7 +-
.../magicviewpager/sample/MainActivity.java | 4 +
.../magicviewpager/sample/ScrollFragment.java | 103 +++++++++
.../sample/SupportScrollActivity.java | 119 ++++++++++
app/src/main/res/layout/list_item.xml | 11 +
app/src/main/res/layout/scroll_activity.xml | 14 ++
app/src/main/res/layout/scroll_fragment.xml | 17 ++
app/src/main/res/values/strings.xml | 1 +
library/src/main/AndroidManifest.xml | 2 +-
.../transformer/AlphaPageTransformer.java | 13 +-
.../RotateDownPageTransformer.java | 38 +++-
.../transformer/RotateUpPageTransformer.java | 38 +++-
.../transformer/RotateYTransformer.java | 32 ++-
.../transformer/ScaleInTransformer.java | 46 ++--
.../com/zhy/magicviewpager/widget/Hacky.java | 59 +++++
.../magicviewpager/widget/MagicViewPager.java | 213 ++++++++++++++++++
.../magicviewpager/widget/TransformType.java | 44 ++++
.../src/main/res/layout/magic_view_pager.xml | 13 ++
library/src/main/res/values/attrs.xml | 17 ++
19 files changed, 734 insertions(+), 57 deletions(-)
create mode 100644 app/src/main/java/com/zhy/magicviewpager/sample/ScrollFragment.java
create mode 100644 app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
create mode 100644 app/src/main/res/layout/list_item.xml
create mode 100644 app/src/main/res/layout/scroll_activity.xml
create mode 100644 app/src/main/res/layout/scroll_fragment.xml
create mode 100644 library/src/main/java/com/zhy/magicviewpager/widget/Hacky.java
create mode 100644 library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
create mode 100644 library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
create mode 100644 library/src/main/res/layout/magic_view_pager.xml
create mode 100644 library/src/main/res/values/attrs.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 54cbce4..66a28bd 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..cf1a9c1
--- /dev/null
+++ b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
@@ -0,0 +1,119 @@
+package com.zhy.magicviewpager.sample;
+
+import android.content.Intent;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.ViewGroup;
+import android.widget.Toast;
+
+import com.zhy.magicviewpager.transformer.AlphaPageTransformer;
+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;
+import com.zhy.magicviewpager.widget.MagicViewPager;
+
+import java.util.ArrayList;
+
+public class SupportScrollActivity extends AppCompatActivity {
+
+ private ArrayList list;
+ private MagicViewPager mViewPager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.scroll_activity);
+ mViewPager = (MagicViewPager) findViewById(R.id.viewpager);
+ list = new ArrayList<>();
+ for (int i = 0; i < 5; i++) {
+ list.add(""+i);
+ }
+
+ SimplePagerAdapter adapter = new SimplePagerAdapter(getSupportFragmentManager());
+ mViewPager.getViewPager().setAdapter(adapter);
+ adapter.notifyDataSetChanged();
+ }
+
+ public class SimplePagerAdapter extends FragmentPagerAdapter {
+
+
+ public SimplePagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @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();
+ }
+ }
+
+ @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();
+ if ("RotateDown".equals(title))
+ {
+ mViewPager.setPageTransformer(new RotateDownPageTransformer());
+ } else if ("RotateUp".equals(title))
+ {
+ mViewPager.setPageTransformer(new RotateUpPageTransformer());
+ } else if ("RotateY".equals(title))
+ {
+ mViewPager.setPageTransformer(new RotateYTransformer());
+ } else if ("Standard".equals(title))
+ {
+ mViewPager.setClipChildren(false);
+ mViewPager.setPageTransformer(null);
+ } else if ("Alpha".equals(title))
+ {
+ mViewPager.setClipChildren(false);
+ mViewPager.setPageTransformer(new AlphaPageTransformer());
+ } else if ("ScaleIn".equals(title))
+ {
+ mViewPager.setPageTransformer(new ScaleInTransformer());
+ } else if ("RotateDown and Alpha".equals(title))
+ {
+ mViewPager.setPageTransformer(new RotateDownPageTransformer(new AlphaPageTransformer()));
+ }else if ("RotateDown and Alpha And ScaleIn".equals(title))
+ {
+ mViewPager.setPageTransformer(new RotateDownPageTransformer(new AlphaPageTransformer(new ScaleInTransformer())));
+ }else if ("Add Transform Can Vertical Scroll".equals(title))
+ {
+ onBackPressed();
+ }
+
+ setTitle(title);
+
+ return true;
+ }
+}
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_activity.xml b/app/src/main/res/layout/scroll_activity.xml
new file mode 100644
index 0000000..f6c196a
--- /dev/null
+++ b/app/src/main/res/layout/scroll_activity.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
\ 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/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..7977a50
--- /dev/null
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
@@ -0,0 +1,213 @@
+package com.zhy.magicviewpager.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Point;
+import android.os.Build;
+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.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
+ */
+public class MagicViewPager extends FrameLayout implements OnPageChangeListener{
+
+
+ private int mPagerMargin = 0;
+ private int mPaddingLeft = 130;
+ private int mPaddingRight = 130;
+ private int mPageLimit = 3;
+ private int mTransformType;
+
+
+ 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);
+ }
+
+ 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,-1);
+ 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;
+ }
+ }
+
+
+ @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 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);
+ }
+ }
+ 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..a05f0b5
--- /dev/null
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
@@ -0,0 +1,44 @@
+package com.zhy.magicviewpager.widget;
+
+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 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;
+
+
+ @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
From 86d38d0b98d060223505d895c2d6787436a4fc67 Mon Sep 17 00:00:00 2001
From: kHRYSTAL <723526676@qq.com>
Date: Sat, 7 May 2016 17:29:42 +0800
Subject: [PATCH 2/3] update IntDef
---
.../java/com/zhy/magicviewpager/widget/TransformType.java | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java b/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
index a05f0b5..3033be6 100644
--- a/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/TransformType.java
@@ -1,5 +1,7 @@
package com.zhy.magicviewpager.widget;
+import android.support.annotation.IntDef;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -14,8 +16,7 @@ public class TransformType {
/**
* 多少种Transform类型
*/
- public static final int TYPE_COUNT = 6;
-
+ public static final int DEFAULT_TYPE_COUNT = 6;
@TransformTypeChecker
@@ -36,7 +37,8 @@ public class TransformType {
@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{
From 065d6fb7673196d8e2bdb0df4ef15df849ada7a6 Mon Sep 17 00:00:00 2001
From: kHRYSTAL <723526676@qq.com>
Date: Sat, 7 May 2016 21:22:48 +0800
Subject: [PATCH 3/3] update code
---
app/src/main/AndroidManifest.xml | 2 +-
.../sample/SupportScrollActivity.java | 79 +++--------
.../sample/SupportScrollFragment.java | 124 ++++++++++++++++++
.../res/layout/support_scroll_activity.xml | 8 ++
...tivity.xml => support_scroll_fragment.xml} | 7 +-
.../magicviewpager/widget/MagicViewPager.java | 25 +++-
6 files changed, 172 insertions(+), 73 deletions(-)
create mode 100644 app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollFragment.java
create mode 100644 app/src/main/res/layout/support_scroll_activity.xml
rename app/src/main/res/layout/{scroll_activity.xml => support_scroll_fragment.xml} (67%)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 66a28bd..ea20013 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,7 +16,7 @@
-
+
diff --git a/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
index cf1a9c1..accb4ab 100644
--- a/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
+++ b/app/src/main/java/com/zhy/magicviewpager/sample/SupportScrollActivity.java
@@ -1,73 +1,24 @@
package com.zhy.magicviewpager.sample;
-import android.content.Intent;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
+import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
-import android.view.ViewGroup;
-import android.widget.Toast;
-import com.zhy.magicviewpager.transformer.AlphaPageTransformer;
-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;
-import com.zhy.magicviewpager.widget.MagicViewPager;
-
-import java.util.ArrayList;
public class SupportScrollActivity extends AppCompatActivity {
- private ArrayList list;
- private MagicViewPager mViewPager;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.scroll_activity);
- mViewPager = (MagicViewPager) findViewById(R.id.viewpager);
- list = new ArrayList<>();
- for (int i = 0; i < 5; i++) {
- list.add(""+i);
- }
-
- SimplePagerAdapter adapter = new SimplePagerAdapter(getSupportFragmentManager());
- mViewPager.getViewPager().setAdapter(adapter);
- adapter.notifyDataSetChanged();
+ setContentView(R.layout.support_scroll_activity);
}
- public class SimplePagerAdapter extends FragmentPagerAdapter {
- public SimplePagerAdapter(FragmentManager fm) {
- super(fm);
- }
-
- @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();
- }
- }
-
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
@@ -81,39 +32,39 @@ public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(MenuItem item)
{
String title = item.getTitle().toString();
+ FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
+ Bundle bundle = new Bundle();
if ("RotateDown".equals(title))
{
- mViewPager.setPageTransformer(new RotateDownPageTransformer());
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,2);
} else if ("RotateUp".equals(title))
{
- mViewPager.setPageTransformer(new RotateUpPageTransformer());
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,3);
} else if ("RotateY".equals(title))
{
- mViewPager.setPageTransformer(new RotateYTransformer());
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,4);
} else if ("Standard".equals(title))
{
- mViewPager.setClipChildren(false);
- mViewPager.setPageTransformer(null);
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,0);
} else if ("Alpha".equals(title))
{
- mViewPager.setClipChildren(false);
- mViewPager.setPageTransformer(new AlphaPageTransformer());
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,1);
} else if ("ScaleIn".equals(title))
{
- mViewPager.setPageTransformer(new ScaleInTransformer());
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,5);
} else if ("RotateDown and Alpha".equals(title))
{
- mViewPager.setPageTransformer(new RotateDownPageTransformer(new AlphaPageTransformer()));
+ bundle.putInt(SupportScrollFragment.TRANSFORM_TYPE,6);
}else if ("RotateDown and Alpha And ScaleIn".equals(title))
{
- mViewPager.setPageTransformer(new RotateDownPageTransformer(new AlphaPageTransformer(new ScaleInTransformer())));
+ 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/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/scroll_activity.xml b/app/src/main/res/layout/support_scroll_fragment.xml
similarity index 67%
rename from app/src/main/res/layout/scroll_activity.xml
rename to app/src/main/res/layout/support_scroll_fragment.xml
index f6c196a..11e6472 100644
--- a/app/src/main/res/layout/scroll_activity.xml
+++ b/app/src/main/res/layout/support_scroll_fragment.xml
@@ -1,13 +1,10 @@
+ android:layout_height="match_parent">
diff --git a/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java b/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
index 7977a50..bcdb176 100644
--- a/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
+++ b/library/src/main/java/com/zhy/magicviewpager/widget/MagicViewPager.java
@@ -2,9 +2,11 @@
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;
@@ -16,6 +18,7 @@
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;
@@ -28,6 +31,7 @@
* update time:
* email: 723526676@qq.com
*/
+@SuppressWarnings("ResourceType")
public class MagicViewPager extends FrameLayout implements OnPageChangeListener{
@@ -35,7 +39,7 @@ public class MagicViewPager extends FrameLayout implements OnPageChangeListener{
private int mPaddingLeft = 130;
private int mPaddingRight = 130;
private int mPageLimit = 3;
- private int mTransformType;
+ @TransformType.TransformTypeChecker private int mTransformType = TransformType.NON_PAGETRANSFORMER;
private Hacky mPager;
@@ -54,6 +58,7 @@ public MagicViewPager(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
+ @SuppressWarnings("ResourceType")
public MagicViewPager(Context context,AttributeSet attrs,int defStyle){
super(context, attrs,defStyle);
@@ -67,7 +72,7 @@ public MagicViewPager(Context context,AttributeSet attrs,int defStyle){
mPaddingLeft);
mPaddingRight = a.getInteger(R.styleable.MagicViewPager_paddingRight,
mPaddingRight);
- mTransformType = a.getInteger(R.styleable.MagicViewPager_transformType,-1);
+ 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);
@@ -78,6 +83,8 @@ public MagicViewPager(Context context,AttributeSet attrs,int defStyle){
init(context);
}
+
+
public void setTransformType(@TransformType.TransformTypeChecker int type){
mTransformType = type;
setDefaultTransform(type);
@@ -104,6 +111,7 @@ private void setDefaultTransform(@TransformType.TransformTypeChecker int type) {
mPageTransformer = null;
break;
}
+ requestLayout();
}
@@ -118,6 +126,12 @@ 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(
@@ -131,7 +145,7 @@ public void setMagicPagerMargin(int pagerMargin) {
mPager.setPageMargin(pagerMargin);
}
- public void setPageTransformer(BasePageTransformer transformer){
+ public void setPageTransformer(BasePageTransformer transformer) {
mPageTransformer = transformer;
}
@@ -180,6 +194,11 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse
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();