- A+
原生开发
1、生成APK时名字带版本号
在gradle文件里面添加生成的代码
1 2 3 4 5 6 7 8 9 10 |
android{ android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "TPUI_V${variant.versionName}_${releaseTime()}.apk" } } } def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("Asia/Chongqing")) } |
2、跳转动画
实现点击跳转时产生一个点击放大的跳转动画
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
public class CircularAnimUtil { private static final long PERFECT_MILLS = 300;//动画时间 private static final int MINI_RADIUS = 0; /** * 从当前Activity 开始转到下一个Activity【或者Intent】 * @param activity 当前Activity * @param intent 跳转到某个Activity/应用 * @param triggerView 点击的view * @param colorOrImageRes 转场时的颜色 * @param durationMills 转场时间 */ private static void startActivityForResult(final Activity activity, final Intent intent, final View triggerView, int colorOrImageRes, final long durationMills) { int[] location = new int[2]; triggerView.getLocationInWindow(location); final int cx = location[0] + triggerView.getWidth() / 2; final int cy = location[1] + triggerView.getHeight() / 2; final ImageView view = new ImageView(activity); view.setScaleType(ImageView.ScaleType.CENTER_CROP); view.setImageResource(colorOrImageRes); final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); int w = decorView.getWidth(); int h = decorView.getHeight(); decorView.addView(view, w, h); final int finalRadius = (int) Math.sqrt(w * w + h * h) + 1; Animator anim = ViewAnimationUtils.createCircularReveal(view, cx, cy, 0, finalRadius); anim.setDuration(durationMills); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); activity.startActivity(intent); activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); // 默认显示返回至当前Activity的动画. triggerView.postDelayed(new Runnable() { @Override public void run() { Animator anim = ViewAnimationUtils.createCircularReveal(view, cx, cy, finalRadius, 0); anim.setDuration(durationMills); anim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); try { decorView.removeView(view); } catch (Exception e) { e.printStackTrace(); } } }); anim.start(); } }, 1000); } }); anim.start(); } public static void startActivityForResult(Activity activity, Intent intent, View triggerView, int colorOrImageRes) { startActivityForResult(activity, intent, triggerView, colorOrImageRes, PERFECT_MILLS); } public static void startActivity(Activity activity, Intent intent, View triggerView, int colorOrImageRes, long durationMills) { startActivityForResult(activity, intent, triggerView, colorOrImageRes, durationMills); } public static void startActivity(Activity activity, Intent intent, View triggerView, int colorOrImageRes) { startActivity(activity, intent, triggerView, colorOrImageRes, PERFECT_MILLS); } public static void startActivity(Activity activity, Class<?> targetClass, View triggerView, int colorOrImageRes) { startActivity(activity, new Intent(activity, targetClass), triggerView, colorOrImageRes, PERFECT_MILLS); } } |
调用方法为
1 2 3 4 5 6 |
/** * Activity 是当前的Activity * intent 是启动的intent * R.color.colorAnim 是转场的颜色或者图片,由你自己选择 **/ CircularAnimUtil.startActivity(Activity,intent,view, R.color.colorAnim); |
3、viewpager加上小点点
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
public class MainActivity extends AppCompatActivity { ViewPagePayAdapte mViewPageAdapte; ViewPager mViewPager; List<Fragment> FragmentList; private LinearLayout dotsLayout;//小点点的布局LinearLayout private ArrayList<ImageView> dotsList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_drawer); dotsLayout = (LinearLayout) findViewById(R.id.dotsLayout); mViewPager = (ViewPager) findViewById(R.id.ViewPager); //初始化列表,把需要显示的Fragment或者其他的view加进列表 FragmentList = new ArrayList<Fragment>(); LayoutInflater layoutInflater = getLayoutInflater(); FragmentList.add(new FirstFragment()); FragmentList.add(new SecondFragment()); mViewPageAdapte = new ViewPagePayAdapte(FragmentList); mViewPager.setAdapter(mViewPageAdapte); mViewPager.addOnPageChangeListener(new OnMyPageChangeListener()); mViewPageAdapte.notifyDataSetChanged(); setPageNum(0);//设置显示首页 //初始化下面的小点点 initDots(); } private void setPageNum(int position) { String pageNum = (position + 1) + "/" + mViewPageAdapte.getCount(); } private class OnMyPageChangeListener implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { setPageNum(position); for (int i = 0; i <viewList.size(); i++) { //判断当前对应的位置,把对应的位置的小点点改变成别的颜色,然后其他的设置为默认图片 if (i == position % viewList.size()) { dotsList.get(i).setImageDrawable(getResources().getDrawable(R.drawable.pointcolor)); } else { dotsList.get(i).setImageDrawable(getResources().getDrawable(R.drawable.point)); } } } @Override public void onPageScrollStateChanged(int state) { } } private void initDots() { dotsList = new ArrayList<ImageView>(); dotsList.clear(); dotsLayout.removeAllViews(); for (int i = 0; i < viewList.size(); i++) { ImageView imageView = new ImageView(this); Drawable drawable = null; if (i == 0) { drawable = getResources().getDrawable(R.drawable.pointcolor); } else { drawable = getResources().getDrawable(R.drawable.point); } imageView.setImageDrawable(drawable); // 考虑屏幕适配 LayoutParams params = new LayoutParams(dip2px(this, 10), dip2px(this, 10)); //设置小点点之间的间距 params.setMargins(dip2px(this, 5), 0, dip2px(this, 5), 0); //将小点点添加大线性布局中 dotsLayout.addView(imageView, params); // 将小点的控件添加到集合中 dotsList.add(imageView); } } public int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } } |
Adapter.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public class ViewPagePayAdapte extends PagerAdapter { private List<Fragment> mViewList; public ViewPagePayAdapte(List<View> mViewList){ this.mViewList=mViewList; } @Override public int getItemPosition(@NonNull Object object) { return super.getItemPosition(object); } @Override public int getCount() { return mViewList.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view==object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { View view = mViewList.get(position); container.addView(view); // Log.i(TAG, NAME + "--instantiateItem++container:" + container.getChildCount() + "++position:" + position); return view; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { // super.destroyItem(container, position, object); container.removeView(mViewList.get(position)); } } |
xml布局
1 2 3 4 5 6 7 8 9 10 |
<android.support.v4.view.ViewPager android:id="@+id/ViewPager" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:id="@+id/dotsLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_alignBottom="@id/viewPager" /> |