package com.metis.base.activity; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsoluteLayout; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.metis.base.ActivityDispatcher; import com.metis.base.R; import com.metis.base.manager.AccountManager; import com.metis.base.manager.RequestCallback; import com.metis.base.module.User; import com.metis.base.utils.Log; import com.metis.base.widget.adapter.delegate.RoleDelegate; import com.metis.msnetworklib.contract.ReturnInfo; import java.util.HashMap; import java.util.Map; public class RoleChooseActivity extends TitleBarActivity { private static final String TAG = RoleChooseActivity.class.getSimpleName(); private AbsoluteLayout mRoleLayout = null; private StarDrawable mDrawable; private View mSelectedView = null; private RoleDelegate mSelectedRole = null; private User mUser = null; private boolean isAlreadyIn = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_role_choose); //TODO isAlreadyIn = getIntent().getBooleanExtra(ActivityDispatcher.KEY_STATUS, false); mRoleLayout = (AbsoluteLayout)findViewById(R.id.role_container); final int length = getResources().getDimensionPixelSize(R.dimen.role_choose_length); mDrawable = new StarDrawable(length); mRoleLayout.setBackground(mDrawable); mUser = (User)getIntent().getSerializableExtra(ActivityDispatcher.KEY_USER); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); showProgressDialog(R.string.text_please_wait, true); mRoleLayout.postDelayed(new Runnable() { @Override public void run() { dismissProgressDialog(); Point[] points = mDrawable.getPoints(); final int size = points.length; final int profileSize = getResources().getDimensionPixelSize(R.dimen.role_profile_size); LayoutInflater inflater = LayoutInflater.from(RoleChooseActivity.this); mRoleLayout.removeAllViews(); for (int i = 0; i < size; i++) { final View view = inflater.inflate(R.layout.layout_role, null); ImageView iv = (ImageView) view.findViewById(R.id.role_profile); TextView tv = (TextView) view.findViewById(R.id.role_name); final RoleDelegate roleDelegate = RoleDelegate.values()[i]; iv.setImageResource(roleDelegate.getDrawableId()); tv.setText(roleDelegate.getNameId()); Point p = points[i]; Log.v(TAG, "p.x=" + p.x + " p.y=" + p.y); AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, p.x - profileSize / 2, p.y - profileSize / 2); mRoleLayout.addView(view, params); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mSelectedView != null) { mSelectedView.setSelected(false); } view.setSelected(true); mSelectedRole = roleDelegate; mSelectedView = view; } }); } getTitleBar().setOnRightBtnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mSelectedRole == null) { Toast.makeText(RoleChooseActivity.this, R.string.toast_role_at_least_choose_one, Toast.LENGTH_SHORT).show(); return; } if (mUser != null) { AccountManager.getInstance(RoleChooseActivity.this).updateUserRole(mSelectedRole.getRoleId(), new RequestCallback() { @Override public void callback(ReturnInfo returnInfo, String callbackId) { if (returnInfo.isSuccess()) { if (isAlreadyIn) { Intent data = new Intent(); setResult(RESULT_OK, data); } else { ActivityDispatcher.mainActivity(RoleChooseActivity.this); } finish(); } } }); /*Map<String, String> map = new HashMap<String, String>(); map.put("userRole", mSelectedRole.getRoleId() + ""); AccountManager.getInstance(RoleChooseActivity.this).updateUserInfo(map, new RequestCallback() { @Override public void callback(ReturnInfo returnInfo, String callbackId) { if (returnInfo.isSuccess()) { ActivityDispatcher.mainActivity(RoleChooseActivity.this); } } });*/ } //TODO } }); } }, 100); } @Override public boolean showAsUpEnable() { return true; } @Override public CharSequence getTitleRight() { return getString(R.string.text_go_on); } private class StarDrawable extends Drawable { private final String TAG = StarDrawable.class.getSimpleName(); private int mRadius = 0; private Point[] mPoints = new Point[5]; private Path mPath = null; private Paint mPaint = null; public StarDrawable(int radius) { if (radius <= 0) { throw new IllegalArgumentException("radius can not <= 0"); } mRadius = radius; mPoints[0] = new Point(); mPoints[1] = new Point(); mPoints[2] = new Point(); mPoints[3] = new Point(); mPoints[4] = new Point(); mPath = new Path(); mPaint = new Paint(); mPaint.setColor(Color.WHITE); mPaint.setStrokeWidth(2); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.FILL_AND_STROKE); } @Override public void draw(Canvas canvas) { final int width = canvas.getWidth(); final int height = canvas.getHeight(); final int centerX = width / 2; final int centerY = height / 2; mPoints[0].x = centerX; mPoints[0].y = centerY - mRadius; mPoints[1].x = centerX + (int)(mRadius * Math.cos(Math.PI / 10)); mPoints[1].y = centerY - (int)(mRadius * Math.sin(Math.PI / 10)); mPoints[2].x = centerX + (int)(mRadius * Math.sin(Math.PI / 5)); mPoints[2].y = centerY + (int)(mRadius * Math.cos(Math.PI / 5)); mPoints[3].x = centerX - (int)(mRadius * Math.sin(Math.PI / 5)); mPoints[3].y = centerY + (int)(mRadius * Math.cos(Math.PI / 5)); mPoints[4].x = centerX - (int)(mRadius * Math.cos(Math.PI / 10)); mPoints[4].y = centerY - (int)(mRadius * Math.sin(Math.PI / 10)); mPath.moveTo(mPoints[0].x, mPoints[0].y); mPath.lineTo(mPoints[1].x, mPoints[1].y); mPath.lineTo(mPoints[2].x, mPoints[2].y); mPath.lineTo(mPoints[3].x, mPoints[3].y); mPath.lineTo(mPoints[4].x, mPoints[4].y); mPath.close(); canvas.drawPath(mPath, mPaint); Log.v(TAG, "p.x canvasDraw"); } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter cf) { } @Override public int getOpacity() { return 0; } public Point[] getPoints() { return mPoints; } } }