Android分享界面制作(底部滑出动画)
来源:互联网 发布:mysql 数据加密 编辑:程序博客网 时间:2024/06/10 04:51
分享界面
为了方便以后开发和熟悉代码,小手亲自实现分享界面。为了减少过多的相关文件,界面使用代码实现,实现如下:
效果图:
实现代码:
实现分享界面的代码(用到了两个自定义控件)
package cn.zszh.customs.widget;import android.content.Context;import android.graphics.Color;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.Gravity;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.TranslateAnimation;import android.widget.LinearLayout;import android.widget.Toast;import cn.sharesdk.sina.weibo.SinaWeibo;import cn.sharesdk.tencent.qq.QQ;import cn.sharesdk.tencent.qzone.QZone;import cn.sharesdk.wechat.favorite.WechatFavorite;import cn.sharesdk.wechat.friends.Wechat;import cn.sharesdk.wechat.moments.WechatMoments;import cn.zszh.customs.view.TextView;import cn.zszh.customs.widget.base.BaseDialog;import com.example.zszhtest.R;public class ShareDialog extends BaseDialog{//界面显示的数据private String[] mTexts={"QQ好友","QQ空间","微信好友","微信朋友圈","微信收藏","新浪微博"};private int[] mImgs={R.drawable.ic_share_qq,R.drawable.ic_share_qq_space,R.drawable.ic_share_wx,R.drawable.ic_share_wx_friends,R.drawable.ic_share_wx_collection,R.drawable.ic_share_xl};//图片数据private OnClickListener mListener;public ShareDialog(Context context) {super(context);mCreateView=initView();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设置Dialog没有标题。需在setContentView之前设置,在之后设置会报错this.requestWindowFeature(Window.FEATURE_NO_TITLE);//设置Dialog背景透明效果,必须设置一个背景,否则会有系统的Dialog样式:外部白框this.getWindow().setBackgroundDrawableResource(android.R.color.transparent);setContentView(mCreateView);//添加视图布局setLayout();}private View initView() {int num=mTexts.length; int number=3;//一行显示的数量 //最外面的布局LinearLayout group=new LinearLayout(mContext);LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);group.setLayoutParams(params);group.setBackgroundColor(Color.BLACK);group.setOrientation(LinearLayout.VERTICAL);//设置垂直方向//标题TextView title=new TextView(mContext);params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,50*mDensity);params.bottomMargin=1;title.setLayoutParams(params);title.setText("分享");title.setTextColor(Color.BLACK);title.setTextSize(16);title.setGravity(Gravity.CENTER);//字居中title.setBackgroundColor(Color.WHITE);group.addView(title);//设置内容for(int i=0,j=0;i<num;){j++;LinearLayout ll=new LinearLayout(mContext);params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0,1.0f);//设置权重ll.setLayoutParams(params);ll.setBackgroundColor(Color.WHITE);ll.setOrientation(LinearLayout.HORIZONTAL);//设置水平方向group.addView(ll);for(;i<j*number && i<num;i++){//一行三个//设置分享图文控件TextView item=new TextView(mContext);params=new LinearLayout.LayoutParams(mScreenWidth/number,LinearLayout.LayoutParams.MATCH_PARENT);params.topMargin=10*mDensity;params.bottomMargin=10*mDensity;item.setLayoutParams(params);item.setBounds(50, 50);//设置图片的宽高Drawable top = mContext.getResources().getDrawable(mImgs[i]); item.setCompoundDrawablesWithIntrinsicBounds(null, top , null, null);//给DrawableTop设置图片item.setText(mTexts[i]);//设置文字item.setGravity(Gravity.CENTER);//字居中MyOnClickListener listener=new MyOnClickListener(i);item.setOnClickListener(listener);//设置点击监听器ll.addView(item);}}//底部TextView cancel=new TextView(mContext);params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,50*mDensity);params.topMargin=1;cancel.setLayoutParams(params);cancel.setText("取消");cancel.setTextColor(Color.BLACK);cancel.setTextSize(16);cancel.setGravity(Gravity.CENTER);//字居中cancel.setBackgroundColor(Color.WHITE);cancel.setOnClickListener(new View.OnClickListener() {//设置取消public void onClick(View arg0) {ShareDialog.this.cancel();}});group.addView(cancel);return group;}public class MyOnClickListener implements android.view.View.OnClickListener{private int mPosition;public MyOnClickListener(int position){mPosition=position;}@Overridepublic void onClick(View v) {Toast.makeText(mContext, mTexts[mPosition], Toast.LENGTH_SHORT).show();ShareDialog.this.cancel();if(mListener!=null){mListener.OnClick(v,mPosition);//调用自定义接口, TODO(分享在调用界面实现分享功能)}}}public interface OnClickListener {void OnClick(View v,int position);}public void setOnClickListener(OnClickListener listener){mListener=listener;}private void setLayout(){WindowManager.LayoutParams params=this.getWindow().getAttributes();params.width=mScreenWidth;params.gravity=Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;;//水平居中、底部this.getWindow().setAttributes(params);}}
自定义基类:BaseDialog
package cn.zszh.customs.widget.base; import android.app.Dialog; import android.content.Context; import android.util.DisplayMetrics; import android.view.KeyEvent;import android.view.View; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener;import android.view.animation.TranslateAnimation; public class BaseDialog extends Dialog{ public View mCreateView; public Context mContext; public int mScreenWidth;//屏幕宽 public int mScreenHeight;//屏幕高 public int mDensity;//单位像素 public Animation mExitAnim;//退出动画 public Animation mEnterAnim;//进入动画 public BaseDialog(Context context) { super(context); init(context); } private void init(Context context) { mContext=context; //计算屏幕的宽高像素 DisplayMetrics metrics=mContext.getResources().getDisplayMetrics(); mScreenHeight=metrics.heightPixels; mScreenWidth=metrics.widthPixels; mDensity=(int) metrics.density; } @Override public void show() { super.show(); enterAnimation();//进入动画 } /** * 进入动画 */ private void enterAnimation(){ if(mEnterAnim==null){ mEnterAnim=new TranslateAnimation(1, 0, 1, 0, 1, 1, 1, 0); mEnterAnim.setDuration(500); } mCreateView.startAnimation(mEnterAnim); } /** * 退出动画 */ private void exitAnimation(){ if(mExitAnim==null){ mExitAnim=new TranslateAnimation(1, 0, 1, 0, 1, 0, 1, 1); mExitAnim.setDuration(500); mExitAnim.setAnimationListener( new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { dismissDialog(); //动画完成执行关闭 } }); } mCreateView.startAnimation(mExitAnim); } /** * 执行关闭 */ private void dismissDialog() { super.dismiss(); } /** * 执行动画 */ @Override public void dismiss() { exitAnimation(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { dismiss(); } return super.onKeyDown(keyCode, event); } }自定义TextView控件:(优化drawable图片显示问题)
package cn.zszh.customs.view;import android.content.Context;import android.graphics.drawable.Drawable;import android.util.AttributeSet;public class TextView extends android.widget.TextView{private Context mContext;private int mWidth=30;private int mHeight=30;//保存设置的图片 private Drawable mLeft, mTop, mRight, mBottom;public TextView(Context context) {this(context,null);}public TextView(Context context, AttributeSet attrs) {super(context, attrs);mContext=context;init();}private void init() {float density=mContext.getResources().getDisplayMetrics().density;//将dip转化成pxmWidth*=density;mHeight*=density;//手动调用该方法,设置文字上下左右方向的图片宽高 setCompoundDrawablesWithIntrinsicBounds(mLeft, mTop, mRight, mBottom);//设置图片的宽高}/** * 重写该方法,文字上下左右方向的图片大小设置 * @param left * @param top * @param right * @param bottom */ @Override public void setCompoundDrawablesWithIntrinsicBounds( Drawable left, Drawable top, Drawable right, Drawable bottom) { if (left != null) { left.setBounds(0, 0, mWidth, mHeight); mLeft=left; } if (right != null) { right.setBounds(0, 0, mWidth, mHeight); mRight=right; } if (top != null) { top.setBounds(0, 0, mWidth, mHeight); mTop=top; } if (bottom != null) { bottom.setBounds(0, 0, mWidth, mHeight); mBottom=bottom; } setCompoundDrawables(left, top, right, bottom);//设置图片的宽高 } /** * 设置图片的宽高 * @param width * @param height */ public void setBounds(int width,int height){ mWidth=width; mHeight=height; init(); }}好了,将上面的代码复制到相应的位置就可以实现如上图的效果,具体分享功能需要自己动手做了(图中的几个分享图片资源需要自己找)。
阅读全文
0 0
- Android分享界面制作(底部滑出动画)
- Android自定义Dialog样式,从屏幕底部滑出动画
- Android的PopWindow动画实现底部滑出菜单
- PopWindow动画实现底部滑出菜单
- Android ViewPager+Fragment超高仿微信主界面(带底部图标切换动画)
- android欢迎界面渐入,渐出效果制作
- 制作开机动画界面
- Android 底部弹出动画
- Android动画(位移动画--从屏幕底部冉冉升起)
- Android BottomSheet:便捷易用的底部滑出面板(1)
- Android自底部平滑向上滑出面板的AndroidSlidingUpPanel
- 简单实用Android底部菜单滑出popupwindow案例
- 从底部滑出动画引发的关于View的一点理解
- Android总结笔记05:Activity的切换方式(从底部弹出,退出时从顶部滑出)
- Android 引导界面制作
- Android制作启动界面
- Android 引导界面制作
- Android 引导界面制作
- Android二维码登录原理及生成与解析
- Java/Jsp中让数值不使用科学计数法显示的解决方案
- LeetCode-Easy部分-图像平滑器
- 未能加载文件或程序集“System.Data.SQLite, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139
- shell 数组赋值
- Android分享界面制作(底部滑出动画)
- 蓝牙天线的介绍与选用
- java 9 新特性
- 文件上传及下载
- Android 使用SpannableString显示不同样式的textview
- 二叉树的镜像
- Python 双向链表的头插尾插
- js强制类型转换
- css3的keyframes无限旋转下去实现