起言
关于第三方分享,若只是简单的集成,只需参考http://wiki.mob.com/android-sharesdk%e5%ae%8c%e6%95%b4%e7%9a%84%e9%9b%86%e6%88%90%e6%96%87%e6%a1%a3/页面的文档说明,即可实现效果,可若是要对分享的页面,以及显示参数进行一些操作的话,那就需要一些其他的办法实现了,话不多说,开始今天的正题。
页面的修改
若是针对自家的app,对分享页面有特殊的要求,可以采取自定义的方法,重写页面,然后,在点击分享按钮时,调取第三方的分享方法即可(可惜我不会,~~~(>_<)~~~,有会的大佬可以给个链接让鄙人学习一下)。
还好我们公司的app对分享页面要求没那么高,我就直接在引进的第三方包里面做修改。
主要修改的下面两个类,如下图:
注:我是采取的快速生成项目的方法,即直接下载sharesdk,然后点击如下图的按钮,去生成:
然后,把生成的项目,丢到自己项目,对应的包里面即可。
接下来说几点页面的简单修改:
1.修改PlatformPageAdapter这一行,可以消除背景色里的间隔线;
2.修改这一段,可以改变背景的颜色;
3.这段代码可以修改第三方分享图标的图案;
4.在PlatformPage中,这段代码,是分享图标和名称的部分,可在上下修改增加布局。
以我司项目代码为例:
View view = View.inflate(activity, R.layout.share_item,null);
view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
llPanel.addView(view);
LinearLayout ll_sharing_makes = view.findViewById(R.id.ll_sharing_makes);
TextView tv_price = view.findViewById(R.id.tv_price);
TextView tv_price1 = view.findViewById(R.id.tv_price1);
TextView tv_invite_detail = view.findViewById(R.id.tv_invite_detail);
if (isPrice > 0) {
ll_sharing_makes.setVisibility(View.VISIBLE);
} else {
ll_sharing_makes.setVisibility(View.GONE);
}
tv_invite_detail.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
tv_invite_detail.getPaint().setAntiAlias(true); //抗锯齿
tv_price.setText("¥ " + isPrice);
tv_price1.setText("每当有一个好友通过你分享的链接购买成功,你将获得" + isPrice + "个法商值(即¥ " + isPrice + ")哦~");
tv_invite_detail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
SimpleBackActivity.launch(activity, SimpleBackPage.INVITE_DETAIL, null);
finish();
}
});
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white">
<LinearLayout
android:id="@+id/ll_sharing_makes"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_invite_detail"
android:layout_marginTop="11dp"
android:layout_marginRight="30dp"
android:layout_gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我的邀请明细"
android:textSize="13sp"
android:textColor="@color/share_green"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="17dp"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/share_point_out_icon"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="分享赚"
android:gravity="center"
android:textColor="@color/colorAccent"
android:textSize="16sp"/>
<TextView
android:id="@+id/tv_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:text=""
android:textStyle="bold"
android:textColor="@color/colorAccent"
android:textSize="19sp"/>
</LinearLayout>
<TextView
android:id="@+id/tv_price1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text=""
android:lineSpacingExtra="4sp"
android:textColor="@color/colorAccent"
android:textSize="13sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text="积分可在“我的”-“我的法商值”里查看"
android:lineSpacingExtra="4sp"
android:textColor="@color/gray"
android:textSize="12sp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_marginTop="35dp"
android:layout_marginBottom="7dp">
<ImageView
android:layout_width="120dp"
android:layout_height="1px"
android:layout_marginTop="10dp"
android:background="@drawable/gradient_line"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/gray"
android:layout_marginLeft="10dp"
android:text="分享至"/>
<ImageView
android:layout_width="120dp"
android:layout_height="1px"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:background="@drawable/gradient_line_right"/>
</LinearLayout>
</LinearLayout>
View view_bottom = View.inflate(activity, R.layout.share_cancel,null);
view_bottom.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, DisplayUtils.dp2px(activity,50)));
llPanel.addView(view_bottom);
TextView tv_cancel = view_bottom.findViewById(R.id.tv_cancel);
tv_cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white">
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/layout_divider"/>
<TextView
android:id="@+id/tv_cancel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="取消分享"
android:textColor="#333333"
android:textSize="17sp"/>
</LinearLayout>
添加上述代码后,分享页面布局变成了如下图所示:
补充说明:
1.若是要更改第三方分享的排列顺序,可以修改assets下的shareSDK.xml文件内,各个第三方分享的Id值,数值较小的排在前面。
2.若是需要更改,第三方的分享图标,可以修改如下图所示:
用UI设计师给的图,同名替换即可。
3.如下图所示,修改PlatformPageAdapterPort的LINE_SIZE_P,可以更改一行分享图标的数量,因我在这里修改成了两个,所以一行只有两个,且分左右排列。
5.增加分享的参数
先在PlatformPage修改这个构造方法,增加需要增加的参数;
再在PlatformPageLand与PlatformPagePort这两个类构造里,增加分享的参数;
然后在OnekeyShare类,增加set方法:
/**
* 显示额外的提示奖励的数额,小于或等于0,不显示额外布局
* @param isPrice
*/
public void setShowExtraPrice(int isPrice){
params.put("showExtraPriceLayout",isPrice);
}
然后,在OnekeyShareThemeImpl中,加上如红框所示的代码
以及
接下来,是ClassicTheme增加的代码:
这样一来,便可在第三方分享中,增加新的参数,各位可以根据各自的项目需要去修改,只是这样写,代码的可扩展性不高,不知道有没有更加高明的写法……
6.分享退出时的动画
第三方的分享,看似是个弹窗,是个dialog或者popupwindow,实际上却是activity,因为:
而FakeActivity实际上也并不是个activity,因为:
若是查fake这个单词的本意,就是欺骗,假的。
而
让退出动画,有了一部分activity的特性,如果要让分享弹窗退出时,效果和dialog或pupupwindow退出时类似,则需要修改其进出场动画,代码如下:
public boolean onFinish() {
if (finished) {
finished = false;
return false;
}
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();
activity.overridePendingTransition(R.anim.fade_in,R.anim.fade_out_share_activity);
}
});
llPanel.clearAnimation();
llPanel.setAnimation(animHide);
llPanel.setVisibility(View.GONE);
return true;
}
修改的是PlatformPage的onFinish()方法,关键代码就一行:
activity.overridePendingTransition(R.anim.fade_in,R.anim.fade_out_share_activity);
另外附上fade_in和fade_out_share_activity的代码:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="1500"
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:toAlpha="0.0"/>
</set>
便可以实现分享退出动画,是渐隐退出的。
后记
这次有关于第三方分享的自定义页面和参数设置,可能有讲得不透彻与不对的地方,却还是有一定的可取之处,欢迎大家学习、吐槽、分享,一起共同的进步。