PubActivity.class
public class PubActivity extends BaseActivity implements View.OnClickListener {
@Bind(R.id.btn_pub)
ImageView mBtnPub;
@Bind({R.id.ll_pub_blog, R.id.ll_pub_tweet})
LinearLayout[] mLays;
public static void show(Context context) {
context.startActivity(new Intent(context, PubActivity.class));
}
@Override
protected int getContentView() {
return R.layout.activity_pub;
}
@Override
protected void initWindow() {
super.initWindow();
getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
}
@Override
protected void initWidget() {
super.initWidget();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mBtnPub.animate()
.rotation(135.0f)
.setDuration(180)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
})
.start();
show(0);
show(1);
}
@OnClick({R.id.rl_main, R.id.ll_pub_tweet, R.id.ll_pub_blog})
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rl_main:
dismiss();
break;
case R.id.ll_pub_tweet:
if(!AccountHelper.isLogin()){
LoginActivity.show(this);
finish();
return;
}
TweetPublishActivity.show(this, mBtnPub);
finish();
break;
case R.id.ll_pub_blog:
if(!AccountHelper.isLogin()){
LoginActivity.show(this);
finish();
return;
}
WriteActivity.show(this);
finish();
break;
}
}
private void dismiss(){
close();
close(0);
close(1);
}
private void close() {
mBtnPub.clearAnimation();
mBtnPub.animate()
.rotation(0f)
.setDuration(180)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
finish();
}
})
.start();
}
private void show(int position) {
int angle = position == 0 ? 45 : 135;
float x = (float) Math.cos(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
float y = (float) -Math.sin(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(mLays[position], "translationX", 0, x);
ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(mLays[position], "translationY", 0, y);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(180);
animatorSet.play(objectAnimatorX).with(objectAnimatorY);
animatorSet.start();
}
private void close(int position) {
int angle = position == 0 ? 45 : 135;
float x = (float) Math.cos(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
float y = (float) -Math.sin(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(mLays[position], "translationX", x, 0);
ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(mLays[position], "translationY", y, 0);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(180);
animatorSet.play(objectAnimatorX).with(objectAnimatorY);
animatorSet.start();
}
@Override
public void onBackPressed() {
dismiss();
}
@Override
public void finish() {
super.finish();
overridePendingTransition(0, 0);
}
}
mBtnPub.animate()
.rotation(135.0f)
.setDuration(180)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
}
})
.start();
show(0);
show(1);
}
@OnClick({R.id.rl_main, R.id.ll_pub_tweet, R.id.ll_pub_blog})
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rl_main:
dismiss();
break;
case R.id.ll_pub_tweet:
if(!AccountHelper.isLogin()){
LoginActivity.show(this);
finish();
return;
}
TweetPublishActivity.show(this, mBtnPub);
finish();
break;
case R.id.ll_pub_blog:
if(!AccountHelper.isLogin()){
LoginActivity.show(this);
finish();
return;
}
WriteActivity.show(this);
finish();
break;
}
}
private void dismiss(){
close();
close(0);
close(1);
}
private void close() {
mBtnPub.clearAnimation();
mBtnPub.animate()
.rotation(0f)
.setDuration(180)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
finish();
}
})
.start();
}
private void show(int position) {
int angle = position == 0 ? 45 : 135;
float x = (float) Math.cos(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
float y = (float) -Math.sin(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(mLays[position], "translationX", 0, x);
ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(mLays[position], "translationY", 0, y);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(180);
animatorSet.play(objectAnimatorX).with(objectAnimatorY);
animatorSet.start();
}
private void close(int position) {
int angle = position == 0 ? 45 : 135;
float x = (float) Math.cos(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
float y = (float) -Math.sin(angle * (Math.PI / 180)) * Util.dipTopx(this, 80);
ObjectAnimator objectAnimatorX = ObjectAnimator.ofFloat(mLays[position], "translationX", x, 0);
ObjectAnimator objectAnimatorY = ObjectAnimator.ofFloat(mLays[position], "translationY", y, 0);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(180);
animatorSet.play(objectAnimatorX).with(objectAnimatorY);
animatorSet.start();
}
@Override
public void onBackPressed() {
dismiss();
}
@Override
public void finish() {
super.finish();
overridePendingTransition(0, 0);
}
}