团队博客-第二阶段冲刺-Day7
团队博客-第二阶段冲刺-Day7
团队任务
完成图片转表格app(TransformMine)的开发
1.统一,简约,漂亮的前端界面
2.完成用户主要功能的开发
3.优化用户体验
4.定时团队任务进行团队任务完成情况的审查
今日完成任务
1.完成调用相册功能的实现
2.实现调用手机相机的功能
今日团队任务关键代码:
package com.transform.transformMine.fragment.other; import android.graphics.Color; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.transform.transformMine.R; import com.transform.transformMine.activity.MainActivity; import com.transform.transformMine.core.BaseFragment; import com.transform.transformMine.databinding.FragmentLoginBinding; import com.transform.transformMine.utils.RandomUtils; import com.transform.transformMine.utils.SettingUtils; import com.transform.transformMine.utils.TokenUtils; import com.transform.transformMine.utils.Utils; import com.transform.transformMine.utils.sdkinit.UMengInit; import com.xuexiang.xaop.annotation.SingleClick; import com.xuexiang.xpage.annotation.Page; import com.xuexiang.xpage.enums.CoreAnim; import com.xuexiang.xui.utils.CountDownButtonHelper; import com.xuexiang.xui.utils.ResUtils; import com.xuexiang.xui.utils.ThemeUtils; import com.xuexiang.xui.utils.ViewUtils; import com.xuexiang.xui.utils.XToastUtils; import com.xuexiang.xui.widget.actionbar.TitleBar; import com.xuexiang.xutil.app.ActivityUtils; @Page(anim = CoreAnim.none) public class LoginFragment extends BaseFragment<FragmentLoginBinding> implements View.OnClickListener { private View mJumpView; private CountDownButtonHelper mCountDownHelper; @NonNull @Override protected FragmentLoginBinding viewBindingInflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, boolean attachToRoot) { return FragmentLoginBinding.inflate(inflater, container, attachToRoot); } @Override protected TitleBar initTitle() { TitleBar titleBar = super.initTitle() .setImmersive(true); titleBar.setBackgroundColor(Color.TRANSPARENT); titleBar.setTitle(""); titleBar.setLeftImageDrawable(ResUtils.getVectorDrawable(getContext(), R.drawable.ic_login_close)); titleBar.setActionTextColor(ThemeUtils.resolveColor(getContext(), R.attr.colorAccent)); mJumpView = titleBar.addAction(new TitleBar.TextAction(R.string.title_jump_login) { @Override public void performAction(View view) { onLoginSuccess(); } }); return titleBar; } @Override protected void initViews() { mCountDownHelper = new CountDownButtonHelper(binding.btnGetVerifyCode, 60); //隐私政策弹窗 if (!SettingUtils.isAgreePrivacy()) { Utils.showPrivacyDialog(getContext(), (dialog, which) -> { dialog.dismiss(); handleSubmitPrivacy(); }); } boolean isAgreePrivacy = SettingUtils.isAgreePrivacy(); binding.cbProtocol.setChecked(isAgreePrivacy); refreshButton(isAgreePrivacy); binding.cbProtocol.setOnCheckedChangeListener((buttonView, isChecked) -> { SettingUtils.setIsAgreePrivacy(isChecked); refreshButton(isChecked); }); } @Override protected void initListeners() { binding.btnGetVerifyCode.setOnClickListener(this); binding.btnLogin.setOnClickListener(this); binding.tvOtherLogin.setOnClickListener(this); binding.tvForgetPassword.setOnClickListener(this); binding.tvUserProtocol.setOnClickListener(this); binding.tvPrivacyProtocol.setOnClickListener(this); } private void refreshButton(boolean isChecked) { ViewUtils.setEnabled(binding.btnLogin, isChecked); ViewUtils.setEnabled(mJumpView, isChecked); } private void handleSubmitPrivacy() { SettingUtils.setIsAgreePrivacy(true); UMengInit.init(); // 应用市场不让默认勾选 // ViewUtils.setChecked(cbProtocol, true); } @SingleClick @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.btn_get_verify_code) { if (binding.etPhoneNumber.validate()) { getVerifyCode(binding.etPhoneNumber.getEditValue()); } } else if (id == R.id.btn_login) { if (binding.etPhoneNumber.validate()) { if (binding.etVerifyCode.validate()) { loginByVerifyCode(binding.etPhoneNumber.getEditValue(), binding.etVerifyCode.getEditValue()); } } } else if (id == R.id.tv_other_login) { XToastUtils.info("其他登录方式"); } else if (id == R.id.tv_forget_password) { XToastUtils.info("忘记密码"); } else if (id == R.id.tv_user_protocol) { Utils.gotoProtocol(this, false, true); } else if (id == R.id.tv_privacy_protocol) { Utils.gotoProtocol(this, true, true); } } /** * 获取验证码 */ private void getVerifyCode(String phoneNumber) { // TODO: 2020/8/29 这里只是界面演示而已 XToastUtils.warning("只是演示,验证码请随便输"); mCountDownHelper.start(); } /** * 根据验证码登录 * * @param phoneNumber 手机号 * @param verifyCode 验证码 */ private void loginByVerifyCode(String phoneNumber, String verifyCode) { // TODO: 2020/8/29 这里只是界面演示而已 onLoginSuccess(); } /** * 登录成功的处理 */ private void onLoginSuccess() { String token = RandomUtils.getRandomNumbersAndLetters(16); if (TokenUtils.handleLoginSuccess(token)) { popToBack(); ActivityUtils.startActivity(MainActivity.class); } } @Override public void onDestroyView() { if (mCountDownHelper != null) { mCountDownHelper.recycle(); } super.onDestroyView(); } }
作者:冰稀饭Aurora
出处:https://www.cnblogs.com/rsy-bxf150/p/17426702.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端