Android之app引导页(背景图片切换加各个页面动画效果)

转载:http://blog.csdn.net/lowprofile_coding/article/details/48037095

先看效果图:


1.显示三个页面的Activity  用view pager去加载三个fragment实现,控制点点点的切换,监听view pager的切换,控制fragment动画的开始跟结束,重写了view pager,实现了背景图片的移动效果.

/*** 主Activity* @author ansen* @create time 2015-08-07*/
public class KaKaLauncherActivity extends FragmentActivity {private GuideViewPager vPager;private List<LauncherBaseFragment> list = new ArrayList<LauncherBaseFragment>();private BaseFragmentAdapter adapter;private ImageView[] tips;private int currentSelect; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_luancher_main);//初始化点点点控件ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup);tips = new ImageView[3];for (int i = 0; i < tips.length; i++) {ImageView imageView = new ImageView(this);imageView.setLayoutParams(new LayoutParams(10, 10));if (i == 0) {imageView.setBackgroundResource(R.drawable.page_indicator_focused);} else {imageView.setBackgroundResource(R.drawable.page_indicator_unfocused);}tips[i]=imageView;LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));layoutParams.leftMargin = 20;//设置点点点view的左边距layoutParams.rightMargin = 20;//设置点点点view的右边距group.addView(imageView,layoutParams);}//获取自定义viewpager 然后设置背景图片vPager = (GuideViewPager) findViewById(R.id.viewpager_launcher);vPager.setBackGroud(BitmapFactory.decodeResource(getResources(),R.drawable.bg_kaka_launcher));/*** 初始化三个fragment  并且添加到list中*/RewardLauncherFragment rewardFragment = new RewardLauncherFragment();PrivateMessageLauncherFragment privateFragment = new PrivateMessageLauncherFragment();StereoscopicLauncherFragment stereoscopicFragment = new StereoscopicLauncherFragment();list.add(rewardFragment);list.add(privateFragment);list.add(stereoscopicFragment);adapter = new BaseFragmentAdapter(getSupportFragmentManager(),list);vPager.setAdapter(adapter);vPager.setOffscreenPageLimit(2);vPager.setCurrentItem(0);vPager.setOnPageChangeListener(changeListener);}/*** 监听viewpager的移动*/OnPageChangeListener changeListener=new OnPageChangeListener() {@Overridepublic void onPageSelected(int index) {setImageBackground(index);//改变点点点的切换效果LauncherBaseFragment fragment=list.get(index);list.get(currentSelect).stopAnimation();//停止前一个页面的动画fragment.startAnimation();//开启当前页面的动画currentSelect=index;}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}};/*** 改变点点点的切换效果* @param selectItems*/private void setImageBackground(int selectItems) {for (int i = 0; i < tips.length; i++) {if (i == selectItems) {tips[i].setBackgroundResource(R.drawable.page_indicator_focused);} else {tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused);}}}
}
2.重写viewpager   在dispatchDraw方法中控制显示的背景图片区域,

/*** 重写ViewPager  主要做一个切换背景的功能* @author ansen* @create time 2015-08-07*/
public class GuideViewPager extends ViewPager {private Bitmap bg;private Paint b = new Paint(1);public GuideViewPager(Context context) {super(context);}public GuideViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void dispatchDraw(Canvas canvas) {if (this.bg != null) {int width = this.bg.getWidth();int height = this.bg.getHeight();int count = getAdapter().getCount();int x = getScrollX();// 子View中背景图片需要显示的宽度,放大背景图或缩小背景图。int n = height * getWidth() / getHeight();/*** (width - n) / (count - 1)表示除去显示第一个ViewPager页面用去的背景宽度,剩余的ViewPager需要显示的背景图片的宽度。* getWidth()等于ViewPager一个页面的宽度,即手机屏幕宽度。在该计算中可以理解为滑动一个ViewPager页面需要滑动的像素值。* ((width - n) / (count - 1)) /getWidth()也就表示ViewPager滑动一个像素时,背景图片滑动的宽度。* x * ((width - n) / (count - 1)) /  getWidth()也就表示ViewPager滑动x个像素时,背景图片滑动的宽度。* 背景图片滑动的宽度的宽度可以理解为背景图片滑动到达的位置。*/int w = x * ((width - n) / (count - 1)) / getWidth();canvas.drawBitmap(this.bg, new Rect(w, 0, n + w, height), new Rect( x, 0, x + getWidth(), getHeight()), this.b);}super.dispatchDraw(canvas);}public void setBackGroud(Bitmap paramBitmap) {this.bg = paramBitmap;this.b.setFilterBitmap(true);}
}
3.主体布局文件  上面放一个自定义的viewpager  下面放一个显示点点的RelativeLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><com.example.view.GuideViewPagerandroid:id="@+id/viewpager_launcher"android:layout_width="match_parent"android:layout_height="match_parent" /><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical" ><LinearLayoutandroid:id="@+id/viewGroup"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginBottom="30dp"android:gravity="center_horizontal"android:orientation="horizontal" /></RelativeLayout></RelativeLayout>
4.ViewPager适配器

/*** Viewpager适配器* @author apple**/
public class BaseFragmentAdapter extends FragmentStatePagerAdapter {private List<LauncherBaseFragment>list;public BaseFragmentAdapter(FragmentManager fm, List<LauncherBaseFragment> list) {super(fm);this.list = list;}public BaseFragmentAdapter(FragmentManager fm) {super(fm);}@Overridepublic Fragment getItem(int arg0) {return list.get(arg0);}@Overridepublic int getCount() {return list.size();}
}
5.Fragment抽象类 有两个抽象方法,开启动画跟停止动画  所有的Fragment都继承这个类  Viewpager切换的时候可以更好的控制每个Fragment开启动画,结束动画

/*** Fragment抽象类* @author ansen* */
public abstract class LauncherBaseFragment extends Fragment{public abstract void  startAnimation();public abstract void  stopAnimation();
}
6.打赏页Fragment  三个动画效果  硬币向下移动动画+打赏图片缩放动画+改变打赏图片透明度然后隐藏图片

/*** 打赏页面* @author ansen* @create time 2015-08-07*/
public class RewardLauncherFragment extends LauncherBaseFragment{private ImageView ivReward;private ImageView ivGold;private Bitmap goldBitmap;private boolean started;//是否开启动画(ViewPage滑动时候给这个变量赋值)@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rooView=inflater.inflate(R.layout.fragment_reward_launcher, null);ivGold=(ImageView) rooView.findViewById(R.id.iv_gold);ivReward=(ImageView) rooView.findViewById(R.id.iv_reward);//获取硬币的高度goldBitmap=BitmapFactory.decodeResource(getActivity().getResources(),R.drawable.icon_gold);startAnimation();return rooView;}public void startAnimation(){started=true;//向下移动动画 硬币的高度*2+80   TranslateAnimation translateAnimation=new TranslateAnimation(0,0,0,goldBitmap.getHeight()*2+80);translateAnimation.setDuration(500);translateAnimation.setFillAfter(true);ivGold.startAnimation(translateAnimation);translateAnimation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation){if(started){ivReward.setVisibility(View.VISIBLE);//硬币移动动画结束开启缩放动画Animation anim=AnimationUtils.loadAnimation(getActivity(),R.anim.reward_launcher);  ivReward.startAnimation(anim);anim.setAnimationListener(new AnimationListener(){@Override  public void onAnimationStart(Animation animation) {}  @Override  public void onAnimationRepeat(Animation animation) {}  @Override  public void onAnimationEnd(Animation animation) {//缩放动画结束 开启改变透明度动画AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);alphaAnimation.setDuration(1000);ivReward.startAnimation(alphaAnimation);alphaAnimation.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {//透明度动画结束隐藏图片ivReward.setVisibility(View.GONE);}});}});}}@Overridepublic void onAnimationRepeat(Animation animation) {}});}@Overridepublic void stopAnimation(){started=false;//结束动画时标示符设置为falseivGold.clearAnimation();//清空view上的动画}
}
7.私信页面   四个动画效果   并且四个动画都相同,其实只要我们实现了一个,其他的基本都很容易了.   依次实现四个图片的放大然后还原

/*** 私信* @author ansen*/
public class PrivateMessageLauncherFragment extends LauncherBaseFragment{private ImageView ivLikeVideo,ivThinkReward,ivThisWeek,ivWatchMovie;private Animation likeAnimation,thinkAnimation,watchAnimation,thisWeekAnimation;private boolean started;//是否开启动画@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rooView=inflater.inflate(R.layout.fragment_private_message_launcher, null);ivLikeVideo=(ImageView) rooView.findViewById(R.id.iv_private_message_like_video);ivThinkReward=(ImageView) rooView.findViewById(R.id.iv_private_message_think_reward);ivWatchMovie=(ImageView) rooView.findViewById(R.id.iv_private_message_watch_movie);ivThisWeek=(ImageView) rooView.findViewById(R.id.private_message_this_week);return rooView;}public void stopAnimation(){//动画开启标示符设置成false   started=false;/*** 清空所有控件上的动画*/ivLikeVideo.clearAnimation();ivThinkReward.clearAnimation();ivWatchMovie.clearAnimation();ivThisWeek.clearAnimation();}public void startAnimation(){started=true;/*** 每次开启动画前先隐藏控件*/ivLikeVideo.setVisibility(View.GONE);ivThinkReward.setVisibility(View.GONE);ivWatchMovie.setVisibility(View.GONE);ivThisWeek.setVisibility(View.GONE);new Handler().postDelayed(new Runnable() {//延时0.5秒之后开启喜欢视频动画@Overridepublic void run(){if(started)likeVideoAnimation();}},500);}/*** 好喜欢你的视频*/private void likeVideoAnimation(){ivLikeVideo.setVisibility(View.VISIBLE);likeAnimation = AnimationUtils.loadAnimation(getActivity(),R.anim.private_message_launcher);ivLikeVideo.startAnimation(likeAnimation);//开启动画likeAnimation.setAnimationListener(new AnimationListener(){  @Override  public void onAnimationStart(Animation animation) {}  @Override  public void onAnimationRepeat(Animation animation) {}  @Override  public void onAnimationEnd(Animation animation) {//监听动画结束if(started)thinkReward();}  }); }/*** 谢谢你的打赏*/private void thinkReward(){ivThinkReward.setVisibility(View.VISIBLE);thinkAnimation = AnimationUtils.loadAnimation(getActivity(),R.anim.private_message_launcher);ivThinkReward.startAnimation(thinkAnimation);thinkAnimation.setAnimationListener(new AnimationListener(){  @Override  public void onAnimationStart(Animation animation) {}  @Override  public void onAnimationRepeat(Animation animation) {}  @Override  public void onAnimationEnd(Animation animation) {if(started)watchMovie();}  }); }/*** 一起看个电影呗*/private void watchMovie(){ivWatchMovie.setVisibility(View.VISIBLE);watchAnimation = AnimationUtils.loadAnimation(getActivity(),R.anim.private_message_launcher);ivWatchMovie.startAnimation(watchAnimation);watchAnimation.setAnimationListener(new AnimationListener(){  @Override  public void onAnimationStart(Animation animation) {}  @Override  public void onAnimationRepeat(Animation animation) {}  @Override  public void onAnimationEnd(Animation animation) {if(started)thisWeek();}  }); }/*** 好啊  这周末有空*/private void thisWeek(){ivThisWeek.setVisibility(View.VISIBLE);thisWeekAnimation = AnimationUtils.loadAnimation(getActivity(),R.anim.private_message_launcher);  ivThisWeek.startAnimation(thisWeekAnimation);}
}
8.最后一个引导页  就两个动画  图片的放大跟缩小,其实用xml布局的话一个动画就能搞定,跟私信页面的动画差不多.小伙伴写的代码.这里换了一种方式.代码比较多.

/*** 最后一个* @author apple*/
public class StereoscopicLauncherFragment extends LauncherBaseFragment implements OnClickListener{private static final float ZOOM_MAX = 1.3f;private static final  float ZOOM_MIN = 1.0f;private ImageView imgView_immediate_experience;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rooView=inflater.inflate(R.layout.fragment_stereoscopic_launcher, null);imgView_immediate_experience=(ImageView) rooView.findViewById(R.id.imgView_immediate_experience);imgView_immediate_experience.setOnClickListener(this);return rooView;}public void playHeartbeatAnimation(){/*** 放大动画*/AnimationSet animationSet = new AnimationSet(true);animationSet.addAnimation(new ScaleAnimation(ZOOM_MIN, ZOOM_MAX, ZOOM_MIN, ZOOM_MAX, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f));animationSet.addAnimation(new AlphaAnimation(1.0f, 0.8f));animationSet.setDuration(500);animationSet.setInterpolator(new AccelerateInterpolator());animationSet.setFillAfter(true);animationSet.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {/*** 缩小动画*/AnimationSet animationSet = new AnimationSet(true);animationSet.addAnimation(new ScaleAnimation(ZOOM_MAX, ZOOM_MIN, ZOOM_MAX,ZOOM_MIN, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f));animationSet.addAnimation(new AlphaAnimation(0.8f, 1.0f));animationSet.setDuration(600);animationSet.setInterpolator(new DecelerateInterpolator());animationSet.setFillAfter(false);// 实现心跳的ViewimgView_immediate_experience.startAnimation(animationSet);}});// 实现心跳的ViewimgView_immediate_experience.startAnimation(animationSet);} @Overridepublic void onClick(View v) {
//		Intent intent = new Intent();
//		intent.setClass(getActivity(),MainActivity.class);
//		startActivity(intent);
//		getActivity().finish();}@Overridepublic void startAnimation() {playHeartbeatAnimation();}@Overridepublic void stopAnimation() {}
}

最后总结:以上就是三个引导页的核心代码了,还有一些布局文件,动画效果的布局文件我就不一一贴出来的,大家可以去下载我的源码,在这个过程中碰到的几个大的问题说明一下.

1.viewpager切换的时候要结束上个fragment的动画   我是通过boolean变量去控制的

2.背景图片移动的效果    之前自己走了很多弯路,后面在网上找了一个demo拿过来用了.因为大家都有开源精神所以这里省了很多功夫

3.图片放大缩小以前居然不知道一个xml动画布局就能搞定.之前一直想办法用两个动画实现

点击源码下载






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VSCode SSH 连接提示: spawn UNKNOWN

随笔记录 目录 1. 背景介绍 2. 确认问题 : ssh -V 3. 解决问题 3.1 确认本地 ssh.exe 路径 3.2 修改vscode Remote.ssh:Path 3.2.1 设置 Reomte.ssh:Path - 方法一 3.2.2 设置 Reomte.ssh:Path - 方法二 1. 背景介绍 windows 系统vscode ssh remote CentOS7&#xff…

手把手教你学Dapr - 9. 可观测性

介绍通过Tracing(跟踪)、Metrics(指标)、Logs(日志)和Health(运行状况)监控应用程序。分布式跟踪Dapr 使用 Zipkin 协议进行分布式跟踪 和 Metrics 收集。由于 Zipkin 协议的普遍性&#xff0c;许多后端都是开箱即用的&#xff0c;例如 Stackdriver、Zipkin、New Relic 等。结合…

这些魔术用的是物理原理?有啥诀窍?

全世界只有3.14 % 的人关注了爆炸吧知识许多成功的魔术&#xff0c;都运用了物理知识。我们在观看魔术表演时&#xff0c;也可以学到相当多的知识&#xff0c;有时用一般的原理就可以表演一个十分精彩的魔术。所以我们希望揭开魔术的神秘面纱&#xff0c;探究其中的物理知识。一…

安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法

可能有的朋友在运行某软件时&#xff0c;会出现了“无法启动此程序,因为计算机中丢失 MSVCR110.dll。尝试重新安装该程序以解决此问题。”的提示,遇到这样的情况该怎么办呢&#xff1f;不用着急&#xff0c;下面小编就为大家带来解决方法&#xff0c;遇到同样问题却不知道如何解…

OAuth 2.0 扩展协议之 PKCE

前言阅读本文前需要了解 OAuth 2.0 授权协议的相关内容&#xff0c; 可以参考我的上一篇文章 OAuth 2.0 的探险之旅[1]。PKCE 全称是 Proof Key for Code Exchange&#xff0c; 在2015年发布&#xff0c; 它是 OAuth 2.0 核心的一个扩展协议&#xff0c; 所以可以和现有的授权模…

欧洲杯直播助PPTV日均流量登顶视频行业首位

随着意大利溃败&#xff0c;西班牙最终捧杯&#xff0c;四年一度火爆的欧洲杯赛事也就此落下帷幕。令人欣喜的是&#xff0c;在本届欧洲杯比赛的直播过程中&#xff0c;由于比赛安排再深夜&#xff0c;互联网应用取代传统电视台成为人们观看赛事的主要渠道&#xff0c;各大视频…

.NET 6新特性试用 | record struct

前言在以前的文章中&#xff0c;我们介绍过record类型&#xff0c;它具有不变性(《为什么应该用record来定义DTO》)和值相等性(《为什么应该用record来定义DTO&#xff08;续&#xff09;》)。record是引用类型。而在.NET 6中&#xff0c;我们可以使用record struct定义值类型。…

原来我们看到的世界地图竟这样震撼!多年的地理白学了...

▲ 点击查看几乎每个家庭都会有两张地图&#xff1a;一张世界地图&#xff0c;一张中国地图。薄薄的两张纸&#xff0c;蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长&#xff0c;也是300多年来唯一一位女校长德鲁吉尔平福斯特&#xff08;Drew Gilpin Faust&#x…

Exchange Powershell查看用户最后登陆邮箱时间

在Exchange日常管理中&#xff0c;我们可能经常会遇到这样的问题&#xff0c;就是怎么来知道一个用户最后的登录时间&#xff1f;这个问题在使用Exchange powershell就能很好的解决了。 用管理员身份运行Exchange management powershell 查看某一个邮箱数据库的统计信息&#x…

易企秀制作的步骤

2019独角兽企业重金招聘Python工程师标准>>> 1、选图很关键 &#xff08;图片干净 整洁&#xff0c;不同方位展示 &#xff0c;符合主题&#xff09;。 2、配上说明性文字 简明扼要 3、选择合适的模板和背景音乐。 4、及时沟通与调整。 转载于:https://my.oschina.n…

C# WPF MVVM模式Prism框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信&#xff0c;Prism提供了一种事件机制&#xff0c;可以在应用程序中低耦合的模块之间进行通信&#xff0c;该机制基于事件聚合器服务&#xff0c;允许发布者和订阅者之间通过事件进行通讯&#xff0c;且彼此之…

这几部高分学科纪录片,助力孩子涨姿势拓视野~

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了几部高分经典学科纪录片&#xff0c;对应文学、数学、经济学、地理、化学。这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器。建议收藏&#xff01;&#xff08;关注视频号少年…

Linux 学习_在Linux下面安装tomcat

要在linux下面安装tomcat&#xff0c;首先我们需要做一些准备工作.... 下载tomcat&#xff1a; 下载地址&#xff1a;http://tomcat.apache.org/download-60.cgi 下载&#xff1a;tar.gz 如图&#xff1a; 说明&#xff1a; WinISO安装版&#xff1a;下载地址&#xff1a;http…

Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

题目链接&#xff1a;点击打开链接 题意&#xff1a; 给定T表示case数 以下4行是一个case 每行2个点&#xff0c;u v 每次u能够绕着v逆时针转90 问最少操作多少次使得4个u构成一个正方形。 思路&#xff1a; 枚举判可行 #include <iostream> #include <cmath> #inc…

欧洲的小国家究竟有多袖珍?

全世界只有3.14 % 的人关注了爆炸吧知识你走遍祖国的每个角落了吗&#xff1f;相信绝大多数人的回答是“NO”但是如果你生活在很小的国家里&#xff0c;也许一根烟&#xff0c;或者一顿午餐的时间&#xff0c;你就可以从这个国家的一端走到另一端。下面就一起看看世界上最小的国…

那些年你追过的电影竟然登上顶刊封面! 盘点思路新奇的顶刊论文

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 募格课堂科研&#xff0c;是一项严肃且要求一丝不苟的研究工作。但你可曾想过&#xff0c;那些年自己追过的像葫芦娃、孙悟空等充满中国风元素的影视作品&#xff0c;竟然被科研人作为idea&#xff0c;不仅有理有据地研究还发了顶…

22504!Windows 11 新预览版发布

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 22504。Windows 11 Insider Preview Build 22504 主要变化如下&#xff1a;1.为了进一步个性化 Windows 11 的文本输入体验&#xff0c;微软为触摸键盘带来了 13 个全新主题&#xff0c…

ERROR (ClientException): Unexpected API Error

ERROR (ClientException): Unexpected API Error ERROR (ClientException): Unexpected API Errorposted on 2016-02-03 11:12 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5179253.html

火了!女教授把自己P成女娲,登上学术期刊封面

全世界只有3.14 % 的人关注了爆炸吧知识2020年4月&#xff0c;江苏师范大学化学与材料科学学院副院长石枫教授在 Chinese Journal of Chemistry 上发表了题为 Axially Chiral Aryl-Alkene-Indole Framework: A Nascent Member of the Atropisomeric Family and Its Catalytic A…

Binding在WPF中的使用

闲来无事&#xff0c;不想打DOTA&#xff0c;在这里小小研究下wpf中关于Binding的东西。 咯咯 在我们印象中&#xff0c;Binding的意思是“绑定”&#xff0c;这个“绑”大概取自于Bind这个单词吧&#xff0c;这么理解的话就是以音译英了&#xff0c;没什么实际意义。 Bind这个…