-
mHomeparams.height = LayoutParams.WRAP_CONTENT;
-
switch (position) {
-
case LEFT_TOP:
-
mHomeparams.gravity = Gravity.LEFT | Gravity.TOP;
-
for (int i = 0; i < menuResIds.length; i++) {
-
int width_padding = mWIDTH / ((menuResIds.length - 1) * 2);
-
int height_padding = mHEIGHT / ((menuResIds.length - 1) * 2);
-
ImageView imageView = new ImageView(mContext);
-
imageView.setImageResource(menuResIds[i]);
-
addView(imageView);
-
LayoutParams params = (FrameLayout.LayoutParams) imageView
-
.getLayoutParams();
-
params.width = LayoutParams.WRAP_CONTENT;
-
params.height = LayoutParams.WRAP_CONTENT;
-
params.leftMargin = mWIDTH / 2
-
- ((menuResIds.length - i - 1) * width_padding);
-
params.topMargin = mHEIGHT / 2 - i * height_padding;
-
params.gravity = Gravity.LEFT | Gravity.TOP;
-
imageView.setLayoutParams(params);
-
}
-
break;
-
case RIGHT_TOP:
-
mHomeparams.gravity = Gravity.RIGHT | Gravity.TOP;
-
for (int i = 0; i < menuResIds.length; i++) {
-
int width_padding = mWIDTH / ((menuResIds.length - 1) * 2);
-
int height_padding = mHEIGHT / ((menuResIds.length - 1) * 2);
-
ImageView imageView = new ImageView(mContext);
-
imageView.setImageResource(menuResIds[i]);
-
addView(imageView);
-
LayoutParams params = (FrameLayout.LayoutParams) imageView
-
.getLayoutParams();
-
params.width = LayoutParams.WRAP_CONTENT;
-
params.height = LayoutParams.WRAP_CONTENT;
-
params.rightMargin = mWIDTH / 2
-
- ((menuResIds.length - i - 1) * width_padding);
-
params.topMargin = mHEIGHT / 2 - i * height_padding;
-
params.gravity = Gravity.RIGHT | Gravity.TOP;
-
imageView.setLayoutParams(params);
-
}
-
break;
-
case RIGHT_BOTTOM:
-
mHomeparams.gravity = Gravity.RIGHT | Gravity.BOTTOM;
-
for (int i = 0; i < menuResIds.length; i++) {
-
int width_padding = mWIDTH / ((menuResIds.length - 1) * 2);
-
int height_padding = mHEIGHT / ((menuResIds.length - 1) * 2);
-
ImageView imageView = new ImageView(mContext);
-
imageView.setImageResource(menuResIds[i]);
-
addView(imageView);
-
LayoutParams params = (FrameLayout.LayoutParams) imageView
-
.getLayoutParams();
-
params.width = LayoutParams.WRAP_CONTENT;
-
params.height = LayoutParams.WRAP_CONTENT;
-
params.rightMargin = mWIDTH / 2
-
- ((menuResIds.length - i - 1) * width_padding);
-
params.bottomMargin = mHEIGHT / 2 - i * height_padding;
-
params.gravity = Gravity.RIGHT | Gravity.BOTTOM;
-
imageView.setLayoutParams(params);
-
}
-
break;
-
case LEFT_BOTTOM:
-
mHomeparams.gravity = Gravity.LEFT | Gravity.BOTTOM;
-
for(int i = 0; i < menuResIds.length; i++){
-
int width_padding = mWIDTH / ((menuResIds.length - 1) * 2);
-
int height_padding = mHEIGHT / ((menuResIds.length -1) * 2);
-
ImageView imageView = new ImageView(mContext);
-
imageView.setImageResource(menuResIds[i]);
-
addView(imageView);
-
LayoutParams params = (FrameLayout.LayoutParams)imageView.getLayoutParams();
-
params.width = LayoutParams.WRAP_CONTENT;
-
params.height = LayoutParams.WRAP_CONTENT;
-
params.leftMargin = mWIDTH / 2 - ((menuResIds.length - i - 1) * width_padding);
-
params.bottomMargin = mHEIGHT / 2 - i * height_padding;
-
params.gravity = Gravity.LEFT | Gravity.BOTTOM;
-
imageView.setLayoutParams(params);
-
}
-
break;
-
default:
-
break;
-
}
-
mHome.setLayoutParams(mHomeparams);
-
}
-
private OnClickListener listener = new OnClickListener() {
-
public void onClick(View v) {
-
if (!bMenuShow) {
-
startAnimationIn(PathMenuView.this, 300);
-
} else {
-
startAnimationOut(PathMenuView.this, 300);
-
}
-
bMenuShow = !bMenuShow;
-
}
-
};
-
/**
-
* 菜单隐藏动画.
-
*
-
* @param group
-
* @param duration
-
*/
-
private void startAnimationIn(ViewGroup group, int duration) {
-
for (int i = 1; i < group.getChildCount(); i++) {
-
ImageView imageview = (ImageView) group.getChildAt(i);
-
imageview.setVisibility(0);
-
MarginLayoutParams mlp = (MarginLayoutParams) imageview
-
.getLayoutParams();
-
Animation animation = null;
-
switch (position) {
-
case LEFT_TOP:
-
animation = new TranslateAnimation(0F,-mlp.leftMargin+xOffset,0F,-mlp.topMargin + yOffset);
-
break;
-
case RIGHT_TOP:
-
animation = new TranslateAnimation(mlp.rightMargin - xOffset,0F,-mlp.topMargin + yOffset,0F);
-
break;
-
case LEFT_BOTTOM:
-
animation = new TranslateAnimation(0F, -mlp.leftMargin+ xOffset, 0F, -yOffset + mlp.bottomMargin);
-
break;
-
case RIGHT_BOTTOM:
-
animation = new TranslateAnimation(mlp.rightMargin-xOffset,0F,-yOffset + mlp.bottomMargin, 0F);
-
break;
-
default:
-
break;
-
}
-
animation.setFillAfter(true);
-
animation.setDuration(duration);
-
animation.setStartOffset((i * 100) / (-1 + group.getChildCount()));
-
animation.setInterpolator(new OvershootInterpolator(2F));
-
imageview.startAnimation(animation);
-
}
-
}
-
/**
-
* 菜单显示动画.
-
*
-
* @param group
-
* @param duration
-
*/
-
private void startAnimationOut(ViewGroup group,int duration){
-
for (int i = 1; i < group.getChildCount(); i++) {
-
final ImageView imageview = (ImageView) group
-
.getChildAt(i);
-
MarginLayoutParams mlp = (MarginLayoutParams) imageview.getLayoutParams();
-
Animation animation = null;
-
switch (position) {
-
case LEFT_TOP:
-
animation = new TranslateAnimation(-mlp.leftMargin+xOffset,0F,-mlp.topMargin + yOffset,0F);
-
break;
-
case RIGHT_TOP:
-
animation = new TranslateAnimation(0F,mlp.rightMargin - xOffset,0F,-mlp.topMargin + yOffset);
-
break;
-
case LEFT_BOTTOM:
-
animation = new TranslateAnimation(-mlp.leftMargin+xOffset,0F, -yOffset + mlp.bottomMargin,0F);
-
break;
-
case RIGHT_BOTTOM:
-
animation = new TranslateAnimation(0F,mlp.rightMargin-xOffset, 0F,-yOffset + mlp.bottomMargin);
-
break;
-
default:
-
break;
-
}
-
animation.setFillAfter(true);animation.setDuration(duration);
-
animation.setStartOffset(((group.getChildCount()-i) * 100)
-
/ (-1 + group.getChildCount()));
-
animation.setInterpolator(new AnticipateInterpolator(2F));
-
imageview.startAnimation(animation);
-
}
-
}
-
}
第四步:PathTestActivity.java以及用到的布局文件main.xml代码如下:
PathTestActivity.java(基本没修改代码)代码如下:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。可以点击GitHub免费获取
希望大家能有一个好心态,想进什么样的公司要想清楚,并不一定是大公司,我选的也不是特大厂。当然如果你不知道选或是没有规划,那就选大公司!希望我们能先选好想去的公司再投或内推,而不是有一个公司要我我就去!还有就是不要害怕,也不要有压力,平常心对待就行,但准备要充足。最后希望大家都能拿到一份满意的 offer !如果目前有一份工作也请好好珍惜好好努力,找工作其实挺累挺辛苦的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。可以点击GitHub免费获取
[外链图片转存中…(img-Buo0eS0b-1711286390524)]