您当前的位置: 首页 > 

xiangzhihong8

暂无认证

  • 0浏览

    0关注

    1324博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

anndroid 模糊引导界面

xiangzhihong8 发布时间:2016-06-14 09:16:34 ,浏览量:0

先上两张图,后面补上代码

我们以前的写法是在需要显示模糊引导的地方,写一个布局,然后第一次使用的时候显示出来。但是这样做代码结构不清晰,所以我们有必要将这些View独立出来,写成一个自定义的View

public class ShowMemberTipsView extends BaseTipsView {

    @Bind(R.id.btn_sure)
    Button btnSure;
    @Bind(R.id.img_close)
    ImageView imgClose;

    private static final String UNIQUE_KEY = ShowMemberTipsView.class.getSimpleName();
    private Context mContext;

    public ShowMemberTipsView(Context context) {
        super(context);
        this.mContext = context;
        init();
    }

    public ShowMemberTipsView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();
    }

    public ShowMemberTipsView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.mContext = context;
        init();
    }

    @Override
    public String getUniquekey() {
        return UNIQUE_KEY;
    }

    private void init() {
        initLayoutParams();
        addStatusBarView();
        addContentView();
    }

    private void initLayoutParams() {
        LayoutParams lp = new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        setOrientation(VERTICAL);
        setLayoutParams(lp);
    }

    private void addContentView() {
        View view = inflate(mContext, R.layout.view_show_member_tips, null);
        ButterKnife.bind(this,view);
        addView(view);
    }


    @OnClick(R.id.btn_sure)
    public void sure() {
        if (mOnSureListener != null) {
            mOnSureListener.onSure(ShowMemberTipsView.this);
        }
    }

    @OnClick(R.id.img_close)
    public void close() {
        if (mOnCloseListener != null) {
            mOnCloseListener.onClose(ShowMemberTipsView.this);
        }
    }
}
引用的布局:




    

        

            

                
            

            

            
        

        

        


        
    

    

最后是一个BaseView,主要是封装一些公共的方法

public abstract class BaseTipsView extends LinearLayout {
    private static final String TAG = BaseTipsView.class.getSimpleName();
    private String mUniqueKey;
    protected OnCloseListener mOnCloseListener;
    protected OnSureListener mOnSureListener;

    public BaseTipsView(Context context) {
        super(context);
        init();
    }

    public BaseTipsView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public BaseTipsView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        mUniqueKey = getUniquekey();
        if (TextUtils.isEmpty(mUniqueKey)) {
            throw new IllegalArgumentException("Uniquekey must not empty!");
        }
        maskClick();
    }

    //获取状态
    protected void addStatusBarView() {
        View statusBarView = new View(getContext());
        statusBarView.setBackgroundColor(getContext().getResources().getColor(R.color.line_color));
        int statusBarHeight = getStatusBarHeight();
        LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
        statusBarView.setLayoutParams(lp);
        addView(statusBarView);
    }

    public abstract String getUniquekey();

    private void maskClick() {
        this.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 因此View背景透明,防止点击到此View后面的控件
            }
        });
    }


    public void show(final Activity activity) {
        if (!isMoreTipsShowed()) {
            addViewToDector(activity);
            setMoreTipsShowed(true);
        }
    }

    public void dismiss(final Activity activity) {
        removeViewFromDector(activity);
    }

    /**
     * 添加View到dectorView
     * @param activity
     */
    private void addViewToDector(final Activity activity) {
        ViewGroup dectorView = (ViewGroup) activity.getWindow().getDecorView();
        dectorView.addView(this);
    }

    /**
     * 从dectorView移出View
     * @param activity
     */
    private void removeViewFromDector(final Activity activity) {
        ViewGroup dectorView = (ViewGroup) activity.getWindow().getDecorView();
        dectorView.removeView(this);
    }

    public void setOnCloseListener(OnCloseListener onCloseListener) {
        this.mOnCloseListener = onCloseListener;
    }

    public void setOnSureListener(OnSureListener onSureListener) {
        this.mOnSureListener = onSureListener;
    }

    public interface OnCloseListener {
        public void onClose(BaseTipsView baseTipsView);
    }

    public interface OnSureListener {
        public void onSure(BaseTipsView baseTipsView);
    }

    protected boolean isMoreTipsShowed() {
        SharedPreferences sp = getContext().getSharedPreferences(TAG, Context.MODE_PRIVATE);
        return sp.getBoolean(mUniqueKey, false);
    }

    protected void setMoreTipsShowed(boolean isShowed) {
        SharedPreferences sp = getContext().getSharedPreferences(TAG, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putBoolean(mUniqueKey, isShowed);
        editor.commit();
    }

    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

}

最后附上源码下载地址:http://download.csdn.net/detail/xiangzhihong8/9549873

关注
打赏
1482932726
查看更多评论
立即登录/注册

微信扫码登录

0.0500s