您的位置:首页 > 移动开发 > Android开发

[置顶] Android 偷梁换柱!!!带你实现修改shareSDK九宫格布局,去除阴影的动画。

2017-04-21 13:43 579 查看
---------------------------------------------扯犊子--------------------------------------------------
今天做到微信登录和微信分享。按照习惯先下载了官方代码,想运行看一下效果,尼玛乱码报错,这都什么鬼。

修改全部文件的编码为GBK,还是有个文件编码乱码......

于是乎删掉各种注释,重新设置为utf-8编码,还是编译不通过。微信这一收费的开发者平台写个demo写成这样也是没谁了,心里默默的的把某某人的名字倒着念了了几遍,问人,找资料。

I:“xxx,你那里有微信登录,微信分享的Demo吗?”

xxx:“你用shareSDK吧,很简单的。”

I;“

shareSDK是啥”

xxx:"你搜mob"

I:“那不是短信验证的吗?”

xxx:"

......"

于是乎打开mob的官网

还真有集成分享和登录。

----------------------------------------扯完犊子,我们进入正题----------------------------------------
官方链接:wiki.mob.com/Android_快速集成指南/




官方集成的九宫格一行的图标个数,去线,添加头尾布局就不多说了,官方都有详细的文档介绍

2.7.1以后简单修改九宫格界面http://bbs.mob.com/thread-21313-1-1.html

这里我们先从简单的说起,更换图标,修改文字

换图标:把你想要的图片的名字换成你要替换的图片的名字,放入xhdpi中, 换名字:在values中的ssdk_strings.xml文件下修改

如果我们需要集成的分享比较少,那么很可能还要修改图标的大小,我们这里以竖屏为例

找到类PlatformPageAdapterPort



 打开看源码是不是很懵逼,懵逼就对了,我也很懵逼



但是我们不需要知道这个类是干嘛的,只要知道他的变量是干嘛的就行了



知道这些我们就直接修改代码吧

logoHeight = (int) (180* ratio);
paddingTop = (int) (DESIGN_PADDING_TOP * ratio);
bottomHeight = (int) (DESIGN_BOTTOM_HEIGHT * ratio);
cellHeight = (int) (240* ratio);
panelHeight = (int) (280* ratio);

这里的ratio是屏幕适配用的,建议写上。

我们运行试一下效果



-----------------------------------------------------------------踩坑---------------------------------------------------------------------------
我们可以看到文字距离底边有点距离,而这颜色和系统默认颜色一样,猜测这是设置了margin,全局搜索margin



因为我们的是竖屏,所以我们看port的点进去追踪

lp.leftMargin = lp.rightMargin = lp.bottomMargin = lp.topMargin = padding;

追踪padding
int padding = (int) (DESIGN_LEFT_PADDING * ratio);


追踪DESIGN_LEFT_PADDING,把他设置为0;

private static final int DESIGN_LEFT_PADDING = 0;


再运行,我们会发现这并没什么卵用

好尴尬。好吧,纯属意外,当我前面没说
我们继续全局搜索margin



设置这里的lp.topMargin = 0;我们会发现这也没什么卵用


-----------------------------------------------踩坑结束------------------------------------------------
还是带你们看源码吧

public View getView(int index, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = createPanel(parent.getContext());
}

LinearLayout llPanel = ResHelper.forceCast(convertView);
LinearLayout[] llCells = ResHelper.forceCast(llPanel.getTag());
refreshPanel(llCells, cells[index]);
return convertView;
}

可以看到adapter的convertView = createPanel();
追踪createPanel我们可以看到

private View createPanel(Context context) {
LinearLayout llPanel = new LinearLayout(context);
llPanel.setOrientation(LinearLayout.VERTICAL);
llPanel.setBackgroundColor(0xfff2f2f2);
......
return llPanel;
}

看到这里大家应该都知道是怎么回事了,修改他的backgroundColor为0xffffffff。



接下来就是重头戏了
,


我们可以看到当我们取消分享的时候会有一个阴影去除的动画。这显然不是我们所需要的,而官方的技术支持表示这一块是无法去除的。


那么我们有没有什么办法可以让他不显示呢,答案是肯定的
我们来看源码,他之所以有一块阴影是他设置了window背景,

activity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000));


运行以后 背景就没了,但是背景也变成了白色,而且导航栏还是有动画效果
继续往下看源码

TextView vTop = new TextView(activity);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.weight = 1;
vTop.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
finish();
}
});
llPage.addView(vTop, lp);


我们可以看到九宫格上面是一个TextView,他有一个点击事件监听,点击以后就让activity销毁
看到这里我们的半透明背景就有了再运行看效果



貌似又回到了起点,不要急,我们在九宫格消失的时候设置九宫格vTop隐藏就行了.
先把vTop生成成员变量
vTop = new TextView(activity);


找到动画监听,在里面加 vTop.setVisibilty(View.Gone);

animHide.setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {

}

public void onAnimationRepeat(Animation animation) {

}

public void onAnimationEnd(Animation animation) {
if (beforeFinish == null) {
// 取消分享菜单的统计
ShareSDK.logDemoEvent(2, null);
} else {
beforeFinish.run();
beforeFinish = null;
}

finished = true;
finish();
}
});
llPanel.clearAnimation();

9b64
llPanel.setAnimation(animHide);
vTop.setVisibility(View.GONE);
llPanel.setVisibility(View.GONE);

return true;
}

运行,这是屏幕的阴影动画效果已经去掉了,但是导航栏的还在我们可以设置导航栏背景色为透明色来达到取消动画的效果(只对5.0系统以上有效,对于5.0以下会可以选择直接隐藏导航栏或者导航栏黑色+动画效果)

重写父类requestFullScreen(boolean fullScreen)方法。

public void requestFullScreen(boolean fullScreen) {
if (fullScreen) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(0x00000000);
}else{
//不显示状态栏
this.activity.getWindow().addFlags(1024);
this.activity.getWindow().clearFlags(2048);

//显示状态栏黑色背景
//          super.requestFullScreen(fullScreen);
}

} else

{
super.requestFullScreen(fullScreen);
}

}

然后在setContentView后面调用;

llPage.setOrientation(LinearLayout.VERTICAL);
activity.setContentView(llPage);

requestFullScreen(true);

vTop = new TextView(activity);




先不要脸的给自己点个赞
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: