这个例子使用枚举,即做了Activity的统跳管理,又将每个Activity的跳转放到了内部,可以学习下。
package com.bob.arclayout;
import android.content.Context;
import com.bob.library.Arc;
public enum Demo {
//Basic
CENTER(R.string.title_center, R.string.note_center, R.layout.arc_large, Arc.CENTER),
LEFT(R.string.title_left, R.string.note_left, R.layout.arc_medium, Arc.LEFT),
RIGHT(R.string.title_right, R.string.note_right, R.layout.arc_medium, Arc.RIGHT),
TOP(R.string.title_top, R.string.note_top, R.layout.arc_medium, Arc.TOP),
TOP_LEFT(R.string.title_top_left, R.string.note_top_left, R.layout.arc_small, Arc.TOP_LEFT),
TOP_RIGHT(R.string.title_top_right, R.string.note_top_right, R.layout.arc_small, Arc.TOP_RIGHT),
BOTTOM(R.string.title_bottom, R.string.note_bottom, R.layout.arc_medium, Arc.BOTTOM),
BOTTOM_LEFT(R.string.title_bottom_left, R.string.note_bottom_left, R.layout.arc_small, Arc.BOTTOM_LEFT),
BOTTOM_RIGHT(R.string.title_bottom_right, R.string.note_bottom_right, R.layout.arc_small, Arc.BOTTOM_RIGHT),
TEXT(R.string.text, R.string.myText, R.layout.text, Arc.BOTTOM){
@Override
public void startActivity(Context context) {
TestActivity.startActivity(context, this);
}
},
//Advanced
ADVANCED_FREE_ANGLE(R.string.title_advanced_freeangle, R.string.note_advanced_freeangle, R.layout.arc_free_angle, Arc.CENTER) {
@Override
public void startActivity(Context context) {
DemoFreeAngleActivity.startActivity(context, this);
}
},
ADVANCED_TUMBLR(R.string.title_advanced_tumblr, 0, 0, null) {
@Override
public void startActivity(Context context) {
DemoLikeTumblrActivity.startActivity(context, this);
}
},
ADVANCED_PATH(R.string.title_advanced_path, 0, 0, null) {
@Override
public void startActivity(Context context) {
DemoLikePathActivity.startActivity(context, this);
}
}
;
public final int titleResId;
public final int noteResId;
public final int layoutResId;
public final Arc arc;
Demo(int titleResId, int noteResId, int layoutResId, Arc arc) {
this.titleResId = titleResId;
this.noteResId = noteResId;
this.layoutResId = layoutResId;
this.arc = arc;
}
public void startActivity(Context context) {
DemoActivity.startActivity(context, this);
}
}
package com.bob.arclayout;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.text.Html;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bob.library.ArcLayout;
public class DemoActivity extends ActionBarActivity implements View.OnClickListener {
private static final String KEY_DEMO = "demo";
public static void startActivity(Context context, Demo demo) {
Intent intent = new Intent(context, DemoActivity.class);
intent.putExtra(KEY_DEMO, demo.name());
context.startActivity(intent);
}
private static Demo getDemo(Intent intent) {
return Demo.valueOf(intent.getStringExtra(KEY_DEMO));
}
Toast mToast = null;
ArcLayout mArcLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Demo demo = getDemo(getIntent());
setContentView(demo.layoutResId);
mArcLayout = (ArcLayout) findViewById(R.id.arc_layout);
mArcLayout.setArc(demo.arc);
for (int i = 0, size = mArcLayout.getChildCount(); i < size; i++) {
mArcLayout.getChildAt(i).setOnClickListener(this);
}
TextView note = (TextView) findViewById(R.id.note_text);
note.setText(Html.fromHtml(getString(demo.noteResId)));
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams)note.getLayoutParams();
switch (demo.arc) {
case TOP:
case TOP_LEFT:
case TOP_RIGHT:
lp.gravity = Gravity.BOTTOM;
break;
case BOTTOM:
case BOTTOM_LEFT:
case BOTTOM_RIGHT:
lp.gravity = Gravity.TOP;
break;
default:
lp.gravity = Gravity.TOP;
}
ActionBar bar = getSupportActionBar();
bar.setTitle(demo.titleResId);
bar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_demo, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.menu_reverse:
mArcLayout.setReverseAngle(!mArcLayout.isReverseAngle());
break;
default:
return super.onOptionsItemSelected(item);
}
return true;
}
@Override
public void onClick(View v) {
if (v instanceof Button) {
showToast((Button) v);
}
}
private void showToast(Button btn) {
if (mToast != null) {
mToast.cancel();
}
String text = "Clicked: " + btn.getText();
mToast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
mToast.show();
}
}
网友评论