编辑小球 public class CreatView extends View { private Paint mpaint; public CreatView(Context context) { super(context); init(context); } public CreatView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { mpaint = new Paint(); //给小球设置颜色 mpaint.setColor(Color.RED); //给小球设置抗锯齿 mpaint.setAntiAlias(true); //给小球设置粗细 mpaint.setStrokeWidth(5); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(50,50,50,mpaint); } //传递颜色改变颜色 public void setcolor(int color){ mpaint.setColor(color); invalidate(); } }
小球的布局
<com.example.zklianxi.CreatView android:id="@+id/cricle" android:layout_width="wrap_content" android:layout_height="wrap_content" />
动画实现的方法
public class MainActivity extends AppCompatActivity { private CreatView mcreatView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mcreatView = findViewById(R.id.cricle); int width=getWindowManager().getDefaultDisplay().getWidth(); int height=getWindowManager().getDefaultDisplay().getHeight(); ObjectAnimator objectAnimatorX=ObjectAnimator.ofFloat(mcreatView,"translationX",0,width-100); ObjectAnimator objectAnimatorY=ObjectAnimator.ofFloat(mcreatView,"translationY",0,height-100); AnimatorSet animatorSet=new AnimatorSet(); animatorSet.setDuration(3000); animatorSet.play(objectAnimatorX).with(objectAnimatorY); animatorSet.start(); animatorSet.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { //跳转到登录页面 startActivity(new Intent(MainActivity.this,LoginActivity.class)); finish(); } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); new Handler().postDelayed(new Runnable() { @Override public void run() { mcreatView.setcolor(Color.BLACK); } },1000); new Handler().postDelayed(new Runnable() { @Override public void run() { mcreatView.setcolor(Color.BLUE); } },2000); } }
写Mvp
view层
public interface UserView { void success(String data); void fail(String error); }
Model层接口
public interface UserModel { interface CallBackListener{ void success(String data); void fail(String error); } //登录 void doLogin(String phone,String pwd,CallBackListener listener); //注册 void doRegister(String phone,String pwd,CallBackListener listener); }
model层类
public class UserModelIml implements UserModel{ //登录 @Override public void doLogin(String phone, String pwd, final CallBackListener listener) { String registerurl="http://172.17.8.100/small/user/v1/login"; FormBody.Builder builder=new FormBody.Builder(); builder.add("phone",phone); builder.add("pwd",pwd); new OkHttp().post(registerurl,builder).result(new OkHttp.HttpListener() { @Override public void success(String data) { listener.success(data); } @Override public void fail(String error) { listener.fail(error); } }); } //注册 @Override public void doRegister(String phone, String pwd, final CallBackListener listener) { //走注册 String registerurl="http://172.17.8.100/small/user/v1/register"; FormBody.Builder builder=new FormBody.Builder(); builder.add("phone",phone); builder.add("pwd",pwd); new OkHttp().post(registerurl,builder).result(new OkHttp.HttpListener() { @Override public void success(String data) { listener.success(data); } @Override public void fail(String error) { listener.fail(error); } }); } }
presenter层接口
public interface UserPresenter { //登录 void doLogin(String phone,String pwd); //注册 void doRegister(String phone,String pwd); }
presenter类
public class UserPresenterIml implements UserModel, UserModel.CallBackListener { private UserModel userModel; private UserView userView; public UserPresenterIml(UserModel userModel, UserView userView) { this.userModel = userModel; this.userView = userView; } //登录 @Override public void doLogin(String phone, String pwd, CallBackListener listener) { userModel.doLogin(phone,pwd,this); } //注册 @Override public void doRegister(String phone, String pwd, CallBackListener listener) { userModel.doRegister(phone,pwd,this); } @Override public void success(String data) { userView.success(data); } @Override public void fail(String error) { userView.fail(error); } //内存泄漏 public void destory(){ if (userModel!=null){ userModel=null; } if (userView!=null){ userView=null; } System.gc(); } }
注册
public class Register extends AppCompatActivity implements View.OnClickListener, UserView, UserModel.CallBackListener { private EditText username,userpass,userpass2; private UserPresenterIml userPresenterIml; private SharedPreferences sp; private String name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); findViewById(R.id.btn_register).setOnClickListener(this); findViewById(R.id.tv_login).setOnClickListener(this); username =(EditText)findViewById(R.id.user_name); userpass = (EditText)findViewById(R.id.user_pass); userpass2 = (EditText)findViewById(R.id.user_pass2); userPresenterIml = new UserPresenterIml(new UserModelIml(),this); sp=getSharedPreferences("user",MODE_PRIVATE); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_register://点击注册 doRegister(); break; case R.id.tv_login://已有账号,立即登录 finish(); break; } } //注册 private void doRegister() { name = username.getText().toString().trim(); String pass = userpass.getText().toString().trim(); String userpass=userpass2.getText().toString().trim(); if (TextUtils.isEmpty(name)){ toast("请输入您的账号"); return; } if (TextUtils.isEmpty(pass)){ toast("请输入您的密码"); return; } if (TextUtils.isEmpty(userpass)){ toast("请您确认您的密码"); return; } if (!pass.equals(userpass)){ toast("请您确认您的俩次密码是否一致"); return; } //走注册 userPresenterIml.doRegister(name,pass,this); } private void toast(String msg){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); } @Override public void success(String data) { UserBean bean=new Gson().fromJson(data,UserBean.class); toast(bean.getMessage()); sp.edit().putString("user_name",name).commit(); if (bean.getStatus().equals("0000")){ finish(); } } @Override public void fail(String error) { toast(error); } @Override public void onPointerCaptureChanged(boolean hasCapture) { } protected void onDestroy() { super.onDestroy(); userPresenterIml.destory(); } }
登录
public class LoginActivity extends AppCompatActivity implements View.OnClickListener, UserView, UserModel.CallBackListener { private SharedPreferences sp; private EditText named,passd; private UserPresenterIml userPresenterIml; private CheckBox mchek; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); findViewById(R.id.liji).setOnClickListener(this); findViewById(R.id.btn_login).setOnClickListener(this); mchek =(CheckBox)findViewById(R.id.checkbox); named =(EditText)findViewById(R.id.user_name); passd = (EditText)findViewById(R.id.user_pass); sp=getSharedPreferences("user",MODE_PRIVATE); userPresenterIml = new UserPresenterIml(new UserModelIml(),this); } @Override protected void onResume() { super.onResume(); String Username=sp.getString("user_name",null); String Userpass=sp.getString("user_pass",null); if (!TextUtils.isEmpty(Username)){ named.setText(Username); } if (!TextUtils.isEmpty(Userpass)){ passd.setText(Userpass); mchek.setChecked(true); } } @Override public void onClick(View view) { switch (view.getId()){ case R.id.liji://跳转到注册 startActivity(new Intent(LoginActivity.this,Register.class)); break; case R.id.btn_login: doLogin(); break; } } private void doLogin() { String name = named.getText().toString().trim(); String pass = passd.getText().toString().trim(); if (TextUtils.isEmpty(name)){ toast("请输入您的账号"); return; } if (TextUtils.isEmpty(pass)){ toast("请输入您的密码"); return; } boolean isCheckbox= mchek.isChecked(); if (isCheckbox){//保存 sp.edit().putString("user_name",name).putString("user_pass",pass).commit(); }else{//清空 sp.edit().putString("user_name","").putString("user_pass","").commit(); } //走登录 userPresenterIml.doLogin(name,pass,this); } private void toast(String msg){ Toast.makeText(this,msg,Toast.LENGTH_SHORT).show(); } @Override public void success(String data) { //toast(data); BeanJson beanJson = new Gson().fromJson(data, BeanJson.class); sp.edit().putString("user_name",beanJson.getResult().getPhone()) .putString("user_nickName",beanJson.getResult().getNickName()) .putString("user_pictrue",beanJson.getResult().getHeadPic()) .commit(); //跳转到用户信息展示页面 } @Override public void fail(String error) { toast(error); } }