自定義ShareSDK的分享界面

在上篇文章裏寫到ShareSDK的集成和使用方法,大家可以看到使用Mob裏ShareSDK爲我們默認提供的分享彈窗默認從底部彈出並且顯示在底部的位置,相對比較單調。不是那麼的漂亮。這時我們就想能否把分享的view居中顯示在手機中部,並且添加一些提示信息和一個取消分享按鈕。真強用戶的體驗性

默認的分享界面風格:

修改後的:


對比後是不是後者的分享界面更加的漂亮些呢。

好,咱們廢話不多說。實現第二個效果的方法實則是修改了ShareSDK裏兩個類的代碼。


1,首先進入到PlatformPagerAdapter類裏修改createPanel(Context context)方法:

private View createPanel(Context context) {
		LinearLayout llPanel = new LinearLayout(context);
		llPanel.setOrientation(LinearLayout.HORIZONTAL);
		//1,設置分享彈窗背景
		llPanel.setBackgroundColor(context.getResources().getColor(com.zt.dzdp.R.color.zdy_color));
		//2,設置圖片作爲背景
		//llPanel.setBackground(context.getDrawable(com.zt.dzdp.R.drawable.zdy_icon));

		...
}


可修改其分享背景爲一個顏色或一張圖片。

2,設置平臺的文字顏色:


好了到此,已經完成PlatformPagerAdapter類裏的初步修改。

3,分享界面的居中顯示,到PlatformPager類裏的onCreate()方法裏來修改:

(1),添加分享提示標題:


代碼:

  lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,130);
                lp.setMargins(0,0,0,0);
                LinearLayout buttonLayout = new LinearLayout(activity);
                buttonLayout.setBackgroundColor(Color.WHITE);
                
                LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,110);
                lp2.setMargins(20, 20, 20, 0);
                TextView tv = new TextView(activity);
                tv.setGravity(Gravity.CENTER);
                tv.setText("~分享到~");
                tv.setTextSize(16);
                tv.setTextColor(Color.BLACK);
                tv.setBackgroundColor(Color.WHITE);
                buttonLayout.addView(tv,lp2);
                llPanel.addView(buttonLayout,lp);

(2)添加取消按鈕:


添加取消按鈕代碼:

  lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,150);
                lp.setMargins(0,0,0,0);
                LinearLayout buttonLayout2 = new LinearLayout(activity);
                buttonLayout2.setBackgroundColor(Color.WHITE);
                
                LinearLayout.LayoutParams lp22 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,110);
                lp22.setMargins(20, 20, 20, 20);
                Button button2 = new Button(activity);
                button2.setText("取消分享");
                button2.setTextSize(16);
                button2.setTextColor(Color.BLACK);
                button2.setBackgroundColor(Color.GREEN);
                button2.setOnClickListener(new OnClickListener() {
                        
                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub
                                finish();
                        }
                });
                buttonLayout2.addView(button2,lp22);
                llPanel.addView(buttonLayout2,lp);
4,分享界面的居中顯示是通過:獲取標題,分享平臺的高度,取消按鈕的高度來設置到layoutParams裏來實現 分享view的居中顯示,且ShareSDK爲我們提供了一個彈窗的動畫效果:

最終PlatformPager類裏的onCreate()方法代碼如下:

/**
	 * 1,整個分享界面是嵌套在一個activity裏的,其有個默認的背景顏色0x4c000000(透明的淡灰色)
	 *    activity.getWindow().setBackgroundDrawable(new ColorDrawable(0x4c000000));
	 *   可以設置爲0x000000全透明增強用戶體驗
	 * 2,initAnims();一個動畫效果方法
	 * 3,即 activity -->llPage(LinearLayout)---addView()方式---->{top(TextView)(點擊空白退出)和 又一個llPanel(LinearLayout)(承載分享界面)[包含:標題textview,分享平臺view,取消分享按鈕] }
	 *
	 */
	public void onCreate() {

		activity.getWindow().setBackgroundDrawable(new ColorDrawable(0x00000000));
		initAnims();

		//llPage即爲嵌套分享彈窗的大UI
		LinearLayout llPage = new LinearLayout(activity);
		llPage.setOrientation(LinearLayout.VERTICAL);
		//分享彈窗嵌套在一個activity裏
		activity.setContentView(llPage);


		//1 上部大textview 默認寬高充滿全屏
		TextView vTop = new TextView(activity);
		vTop.setText("~分享到~");
		vTop.setBackgroundColor(0x00000000);//設置爲透明
//		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
//		lp.weight = 1;
		LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		lp.setMargins(0,200,0,0);

		vTop.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				finish();
			}
		});
//		llPage.addView(vTop, lp); //textview可以不添加,其設計目的是點擊屏幕空白退出分享界面

		//2分享彈窗的後面背景,在不添加vTop時其爲充滿全屏/並且是分享界面的承載
		llPanel = new LinearLayout(activity);
		llPage.setBackgroundColor(0x00000000);//設置爲透明(佔滿全屏)
		llPanel.setOrientation(LinearLayout.VERTICAL);
		lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

		llPanel.setAnimation(animShow);
		llPage.addView(llPanel, lp);//不能註釋否則分享界面不會出來


		//my add code/////////////增加TextView標題layout/////////////////////
		lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,130);
		lp.setMargins(0,0,0,0);
		LinearLayout buttonLayout = new LinearLayout(activity);
		buttonLayout.setBackgroundColor(Color.GRAY);
		LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,110);
		lp2.setMargins(20, 20, 20, 0);
		TextView tv = new TextView(activity);
		tv.setGravity(Gravity.CENTER);
		tv.setText("~分享到~");
		tv.setTextSize(16);
		tv.setTextColor(Color.RED);
		tv.setBackgroundColor(Color.GRAY);
		buttonLayout.addView(tv,lp2);
		llPanel.addView(buttonLayout,lp);
		///////////////

		int title_h = buttonLayout.getLayoutParams().height;

		//3 分享平臺的圖標和名稱
		MobViewPager mvp = new MobViewPager(activity);
		ArrayList<Object> cells = collectCells();
		PlatformPageAdapter adapter = newAdapter(cells);
		lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getPanelHeight());
		llPanel.addView(mvp, lp);
		//註釋以下6句代碼可隱藏翻頁欄即切換小點
		IndicatorView vInd = new IndicatorView(activity);
		lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, adapter.getBottomHeight());
		llPanel.addView(vInd, lp);
		vInd.setScreenCount(adapter.getCount());
		vInd.onScreenChange(0, 0);
		adapter.setIndicator(vInd);
		mvp.setAdapter(adapter);

		int share_view_h = mvp.getLayoutParams().height;

		//my add code/////////////增加取消按鈕layout/////////////////////
		lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,150);
		lp.setMargins(0,0,0,0);
		LinearLayout buttonLayout2 = new LinearLayout(activity);
		buttonLayout2.setBackgroundColor(Color.GRAY);
		LinearLayout.LayoutParams lp22 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,110);
		lp22.setMargins(20, 20, 20, 20);
		Button button2 = new Button(activity);
		button2.setText("取消分享");
		button2.setTextSize(16);
		button2.setTextColor(Color.BLACK);
		button2.setBackgroundColor(Color.GREEN);
		button2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});
		buttonLayout2.addView(button2,lp22);
		llPanel.addView(buttonLayout2,lp);

		int button_h = buttonLayout2.getLayoutParams().height;
		///////////////////////
		//獲取標題,分享平臺的高度,取消按鈕的高度來設置到layoutParams裏來實現 分享view的居中顯示
		int h = title_h + share_view_h + button_h;//500
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,h);
		int margin_top=getPingmu().heightPixels/2-layoutParams.height/2;
		layoutParams.setMargins(0,margin_top,0,0);
		llPanel.setLayoutParams(layoutParams);

	}

注:getPingmu()是獲取手機屏幕寬高的方法:

private DisplayMetrics getPingmu(){
        WindowManager mag = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics metrics = new DisplayMetrics();
        mag.getDefaultDisplay().getMetrics(metrics);
        return metrics;
    }

我對動畫方法做了一點參數的修改:

private void initAnims() {
		animShow = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 2, Animation.RELATIVE_TO_SELF,-1);
		animShow.setDuration(300);

		animHide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF,2);
		animHide.setDuration(300);
	}

好了到此就可以去修改你的code吧。更多的修改細節請查看其官網論壇裏的介紹:http://bbs.mob.com/thread-21313-1-1.html



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章