日期:2019.5.30
博客期:089
星期四
今天终终终终终终终终终终终终终终终终终终终终终于找到了可以使用的能够调用的方法了,因为之前使用的Activity,Activity里面的传值方式有很大的不同,所以我按照之前的Activity类的继承关系重新谱写了它可以用的View类,当然这是为了和 ViewPager一起联合使用而制作的!
嘿嘿,小发以下代码,你们对比一看就知道有什么幺蛾子了!
Activity代码:
1 package com.example.meetstars2; 2 3 import android.content.Intent; 4 import android.location.LocationManager; 5 import android.os.Bundle; 6 import android.os.Handler; 7 import android.support.constraint.ConstraintLayout; 8 import android.support.v4.view.PagerAdapter; 9 import android.support.v4.view.ViewPager; 10 import android.support.v7.app.AppCompatActivity; 11 import android.util.SparseArray; 12 import android.view.LayoutInflater; 13 import android.view.View; 14 import android.view.ViewGroup; 15 import android.view.animation.AccelerateInterpolator; 16 import android.widget.Button; 17 import android.widget.ImageView; 18 import android.widget.TextView; 19 import android.widget.Toast; 20 21 import com.example.meetstars2.basic.CustomViewPager; 22 import com.example.meetstars2.basic.FixedSpeedScroller; 23 import com.example.meetstars2.basic.Info; 24 import com.example.meetstars2.basic.LogUtils; 25 import com.example.meetstars2.basic.RadarViewGroup; 26 import com.example.meetstars2.basic.ZoomOutPageTransformer; 27 28 import java.lang.reflect.Field; 29 30 public class RadarPageActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener, RadarViewGroup.IRadarClickListener{ 31 32 private SparseArray<Info> mDatas = new SparseArray<>(); 33 private int[] mImgs = {R.drawable.len, R.drawable.leo, R.drawable.lep, 34 R.drawable.leq, R.drawable.ler, R.drawable.les, R.drawable.mln, R.drawable.mmz, R.drawable.mna, 35 R.drawable.mnj}; 36 private String[] mNames = {"孟婆汤", "在陋巷", "王司徒", "吉尼太梅", "无敌霹雳小旋风", "黄大锤", "神马浮云", "在你家白吃","露了馅的豆包","忍者的儿子"}; 37 private RadarViewGroup radarViewGroup; 38 private FixedSpeedScroller scroller; 39 private CustomViewPager viewPager; 40 private ConstraintLayout constraintLayout; 41 private int mPosition; 42 private static final String TAG = "RadarPageActivity"; 43 private LocationManager locationManager; 44 private String locationProvider; 45 @Override 46 protected void onCreate(Bundle savedInstanceState) { 47 super.onCreate(savedInstanceState); 48 setContentView(R.layout.activity_radar_page); 49 50 initData(); 51 initView(); 52 53 ViewpagerAdapter mAdapter = new ViewpagerAdapter(); 54 viewPager.setAdapter(mAdapter); 55 //设置缓存数为展示的数目 56 viewPager.setOffscreenPageLimit(mImgs.length); 57 viewPager.setPageMargin(getResources().getDimensionPixelOffset(R.dimen.viewpager_margin)); 58 //设置切换动画 59 viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); 60 viewPager.addOnPageChangeListener(this); 61 setViewPagerSpeed(250); 62 63 new Handler().postDelayed(new Runnable() { 64 @Override 65 public void run() { 66 radarViewGroup.setDatas(mDatas); 67 } 68 }, 1500); 69 70 radarViewGroup.setiRadarClickListener(this); 71 72 } 73 74 private void initData() { 75 for (int i = 0; i < mImgs.length; i++) { 76 Info info = new Info(); 77 info.setPortraitId(mImgs[i]); 78 info.setAge(((int) Math.random() * 25 + 16) + "岁"); 79 info.setName(mNames[(int) (Math.random() * mNames.length)]); 80 info.setSex(i % 3 == 0 ? false : true); 81 info.setDistance(Math.round((Math.random() * 10) * 100) / 100); 82 mDatas.put(i, info); 83 } 84 } 85 private void initView() { 86 viewPager = (CustomViewPager) findViewById(R.id.vp); 87 radarViewGroup = (RadarViewGroup) findViewById(R.id.radar); 88 } 89 90 private void setViewPagerSpeed(int duration) { 91 try { 92 Field field = ViewPager.class.getDeclaredField("mScroller"); 93 field.setAccessible(true); 94 scroller = new FixedSpeedScroller(RadarPageActivity.this, new AccelerateInterpolator()); 95 field.set(viewPager, scroller); 96 scroller.setmDuration(duration); 97 } catch (NoSuchFieldException e) { 98 e.printStackTrace(); 99 } catch (IllegalAccessException e) { 100 e.printStackTrace(); 101 } 102 } 103 104 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 105 mPosition = position; 106 } 107 108 public void onPageSelected(int position) { 109 radarViewGroup.setCurrentShowItem(position); 110 LogUtils.w("当前位置 " + mPosition); 111 LogUtils.w("速度 " + viewPager.getSpeed()); 112 //当手指左滑速度大于2000时viewpager右滑(注意是item+2) 113 if (viewPager.getSpeed() < -1800) { 114 115 viewPager.setCurrentItem(mPosition + 2); 116 LogUtils.w("位置 " + mPosition); 117 viewPager.setSpeed(0); 118 } else if (viewPager.getSpeed() > 1800 && mPosition > 0) { 119 //当手指右滑速度大于2000时viewpager左滑(注意item-1即可) 120 viewPager.setCurrentItem(mPosition - 1); 121 LogUtils.w("位置 " + mPosition); 122 viewPager.setSpeed(0); 123 } 124 } 125 126 public void onPageScrollStateChanged(int state) { 127 128 } 129 130 131 public void onRadarItemClick(int position) { 132 133 viewPager.setCurrentItem(position); 134 135 } 136 137 class ViewpagerAdapter extends PagerAdapter { 138 @Override 139 public Object instantiateItem(ViewGroup container, final int position) { 140 final Info info = mDatas.get(position); 141 //设置一大堆演示用的数据,麻里麻烦~~ 142 View view = LayoutInflater.from(RadarPageActivity.this).inflate(R.layout.viewpager_layout, null); 143 ImageView ivPortrait = (ImageView) view.findViewById(R.id.iv); 144 ImageView ivSex = (ImageView) view.findViewById(R.id.iv_sex); 145 TextView tvName = (TextView) view.findViewById(R.id.tv_name); 146 TextView tvDistance = (TextView) view.findViewById(R.id.tv_distance); 147 tvName.setText(info.getName()); 148 tvDistance.setText(info.getDistance() + "km"); 149 ivPortrait.setImageResource(info.getPortraitId()); 150 if (info.getSex()) { 151 ivSex.setImageResource(R.drawable.girl); 152 } else { 153 ivSex.setImageResource(R.drawable.boy); 154 } 155 ivPortrait.setOnClickListener(new View.OnClickListener() { 156 @Override 157 public void onClick(View v) { 158 Toast.makeText(RadarPageActivity.this, "这是 " + info.getName() + " >.<", Toast.LENGTH_SHORT).show(); 159 } 160 }); 161 container.addView(view); 162 163 Button button = (Button)view.findViewById(R.id.btn_calling); 164 Button button2 = (Button)view.findViewById(R.id.btn_referInformation); 165 166 button.setOnClickListener(new View.OnClickListener() { 167 @Override 168 public void onClick(View arg0) { 169 // 打开另一个activity,通过意图,意图作用是激活其他组件 170 Intent intent = new Intent(); 171 intent.setClass(getApplicationContext(),TalkPageActivity.class); 172 173 //发送意图.将意图发送给android系统,系统根据意图来激活组件 174 startActivity(intent); 175 } 176 }); 177 178 button2.setOnClickListener(new View.OnClickListener() { 179 @Override 180 public void onClick(View arg0) { 181 // 打开另一个activity,通过意图,意图作用是激活其他组件 182 Intent intent = new Intent(); 183 intent.setClass(getApplicationContext(),SettingsActivity.class); 184 185 //发送意图.将意图发送给android系统,系统根据意图来激活组件 186 startActivity(intent); 187 } 188 }); 189 return view; 190 } 191 192 @Override 193 public int getCount() { 194 return mImgs.length; 195 } 196 197 @Override 198 public boolean isViewFromObject(View view, Object object) { 199 return view == object; 200 } 201 202 @Override 203 public void destroyItem(ViewGroup container, int position, Object object) { 204 View view = (View) object; 205 container.removeView(view); 206 } 207 } 208 }
View代码:
1 package com.example.meetstars2.basic; 2 3 import android.content.Context; 4 import android.content.Intent; 5 import android.location.LocationManager; 6 import android.os.Bundle; 7 import android.os.Handler; 8 import android.support.constraint.ConstraintLayout; 9 import android.support.v4.view.PagerAdapter; 10 import android.support.v4.view.ViewPager; 11 import android.util.SparseArray; 12 import android.view.LayoutInflater; 13 import android.view.View; 14 import android.view.ViewGroup; 15 import android.view.animation.AccelerateInterpolator; 16 import android.widget.Button; 17 import android.widget.ImageView; 18 import android.widget.TextView; 19 import android.widget.Toast; 20 21 import com.example.meetstars2.ParternActivity; 22 import com.example.meetstars2.R; 23 import com.example.meetstars2.RadarPageActivity; 24 import com.example.meetstars2.SettingsActivity; 25 import com.example.meetstars2.TalkPageActivity; 26 27 import java.lang.reflect.Field; 28 29 public class RadarHelper implements ViewPager.OnPageChangeListener, RadarViewGroup.IRadarClickListener { 30 private SparseArray<Info> mDatas = new SparseArray<>(); 31 private int[] mImgs = {R.drawable.len, R.drawable.leo, R.drawable.lep, 32 R.drawable.leq, R.drawable.ler, R.drawable.les, R.drawable.mln, R.drawable.mmz, R.drawable.mna, 33 R.drawable.mnj}; 34 private String[] mNames = {"孟婆汤", "在陋巷", "王司徒", "吉尼太梅", "无敌霹雳小旋风", "黄大锤", "神马浮云", "在你家白吃", "露了馅的豆包", "忍者的儿子"}; 35 private RadarViewGroup radarViewGroup; 36 private FixedSpeedScroller scroller; 37 private CustomViewPager viewPager; 38 private ConstraintLayout constraintLayout; 39 private int mPosition; 40 private static final String TAG = "RadarPageActivity"; 41 private LocationManager locationManager; 42 private String locationProvider; 43 public Context context; 44 public View final_view; 45 46 public RadarHelper(LayoutInflater layoutInflater,Context context){ 47 final_view = layoutInflater.inflate(R.layout.activity_radar_page,null); 48 this.context = context; 49 init(); 50 } 51 52 protected void init() { 53 54 initData(); 55 initView(); 56 57 ViewpagerAdapter mAdapter = new ViewpagerAdapter(); 58 viewPager.setAdapter(mAdapter); 59 //设置缓存数为展示的数目 60 viewPager.setOffscreenPageLimit(mImgs.length); 61 viewPager.setPageMargin(final_view.getResources().getDimensionPixelOffset(R.dimen.viewpager_margin)); 62 //设置切换动画 63 viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); 64 viewPager.addOnPageChangeListener(this); 65 setViewPagerSpeed(250); 66 67 new Handler().postDelayed(new Runnable() { 68 @Override 69 public void run() { 70 radarViewGroup.setDatas(mDatas); 71 } 72 }, 1500); 73 74 radarViewGroup.setiRadarClickListener(this); 75 76 } 77 78 private void initData() { 79 for (int i = 0; i < mImgs.length; i++) { 80 Info info = new Info(); 81 info.setPortraitId(mImgs[i]); 82 info.setAge(((int) Math.random() * 25 + 16) + "岁"); 83 info.setName(mNames[(int) (Math.random() * mNames.length)]); 84 info.setSex(i % 3 == 0 ? false : true); 85 info.setDistance(Math.round((Math.random() * 10) * 100) / 100); 86 mDatas.put(i, info); 87 } 88 } 89 90 private void initView() { 91 viewPager = (CustomViewPager) final_view.findViewById(R.id.vp); 92 radarViewGroup = (RadarViewGroup) final_view.findViewById(R.id.radar); 93 } 94 95 private void setViewPagerSpeed(int duration) { 96 try { 97 Field field = ViewPager.class.getDeclaredField("mScroller"); 98 field.setAccessible(true); 99 scroller = new FixedSpeedScroller(context, new AccelerateInterpolator()); 100 field.set(viewPager, scroller); 101 scroller.setmDuration(duration); 102 } catch (NoSuchFieldException e) { 103 e.printStackTrace(); 104 } catch (IllegalAccessException e) { 105 e.printStackTrace(); 106 } 107 } 108 109 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 110 mPosition = position; 111 } 112 113 public void onPageSelected(int position) { 114 radarViewGroup.setCurrentShowItem(position); 115 LogUtils.w("当前位置 " + mPosition); 116 LogUtils.w("速度 " + viewPager.getSpeed()); 117 //当手指左滑速度大于2000时viewpager右滑(注意是item+2) 118 if (viewPager.getSpeed() < -1800) { 119 120 viewPager.setCurrentItem(mPosition + 2); 121 LogUtils.w("位置 " + mPosition); 122 viewPager.setSpeed(0); 123 } else if (viewPager.getSpeed() > 1800 && mPosition > 0) { 124 //当手指右滑速度大于2000时viewpager左滑(注意item-1即可) 125 viewPager.setCurrentItem(mPosition - 1); 126 LogUtils.w("位置 " + mPosition); 127 viewPager.setSpeed(0); 128 } 129 } 130 131 public void onPageScrollStateChanged(int state) { 132 133 } 134 135 136 public void onRadarItemClick(int position) { 137 138 viewPager.setCurrentItem(position); 139 140 } 141 142 class ViewpagerAdapter extends PagerAdapter { 143 @Override 144 public Object instantiateItem(final ViewGroup container, final int position) { 145 final Info info = mDatas.get(position); 146 //设置一大堆演示用的数据,麻里麻烦~~ 147 View view = LayoutInflater.from(container.getContext()).inflate(R.layout.viewpager_layout, null); 148 ImageView ivPortrait = (ImageView) view.findViewById(R.id.iv); 149 ImageView ivSex = (ImageView) view.findViewById(R.id.iv_sex); 150 TextView tvName = (TextView) view.findViewById(R.id.tv_name); 151 TextView tvDistance = (TextView) view.findViewById(R.id.tv_distance); 152 tvName.setText(info.getName()); 153 tvDistance.setText(info.getDistance() + "km"); 154 ivPortrait.setImageResource(info.getPortraitId()); 155 if (info.getSex()) { 156 ivSex.setImageResource(R.drawable.girl); 157 } else { 158 ivSex.setImageResource(R.drawable.boy); 159 } 160 ivPortrait.setOnClickListener(new View.OnClickListener() { 161 @Override 162 public void onClick(View v) { 163 Toast.makeText(container.getContext(), "这是 " + info.getName() + " >.<", Toast.LENGTH_SHORT).show(); 164 } 165 }); 166 container.addView(view); 167 168 Button button = (Button) view.findViewById(R.id.btn_calling); 169 Button button2 = (Button) view.findViewById(R.id.btn_referInformation); 170 171 button.setOnClickListener(new View.OnClickListener() { 172 @Override 173 public void onClick(View arg0) { 174 // 打开另一个activity,通过意图,意图作用是激活其他组件 175 Intent intent = new Intent(); 176 intent.setClass(container.getContext(), TalkPageActivity.class); 177 178 //发送意图.将意图发送给android系统,系统根据意图来激活组件 179 container.getContext().startActivity(intent); 180 } 181 }); 182 183 button2.setOnClickListener(new View.OnClickListener() { 184 @Override 185 public void onClick(View arg0) { 186 // 打开另一个activity,通过意图,意图作用是激活其他组件 187 Intent intent = new Intent(); 188 intent.setClass(container.getContext(), SettingsActivity.class); 189 190 //发送意图.将意图发送给android系统,系统根据意图来激活组件 191 container.getContext().startActivity(intent); 192 } 193 }); 194 return view; 195 } 196 197 @Override 198 public int getCount() { 199 return mImgs.length; 200 } 201 202 @Override 203 public boolean isViewFromObject(View view, Object object) { 204 return view == object; 205 } 206 207 @Override 208 public void destroyItem(ViewGroup container, int position, Object object) { 209 View view = (View) object; 210 container.removeView(view); 211 } 212 } 213 }
虽说会了以后就觉得挺简单的,我还是没有什么实际的感觉,毕竟~唉~还是对安卓程序发怵啊!花了这么多时间,才搞定这么一个小模块,感觉自己就是菜鸡啊!历程是艰苦的,结果是令人愉悦的,不对,接下来我们要针对用户的其他操作进行梳理和功能设计、实现了。