글
소스 공개합니다.
public class MainActivity extends Activity implements OnClickListener {
private static final int SEND_START_MESSAGE = 0;
private static final int SEND_STOP_MESSAGE = 1;
private static final int SEND_RESET_MESSAGE = 2;
private TextView mTimerTv;
private Button mStartBtn;
private Button mStopBtn;
private Button mResetBtn;
private Button mCheckBtn;
private int mCount = 1;
private long mStartTime = 0L;
private long mTimeInMillies = 0L;
/**
* stop을 눌렀을때, 지금까지 경과시간을 저장하기 위해서
*/
private long mElapsedTime = 0L;
private long mFinalTime = 0L;
private StopwatchHandler mHandler;
private boolean mIsRunning = false;
private ListView mListView;
private ListAdapter mAdapter;
private ArrayList<InfoData> mInfoList = new ArrayList<InfoData>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTimerTv = (TextView)findViewById(R.id.timerTv);
mTimerTv.setText("00:00.000");
mStartBtn = (Button)findViewById(R.id.startBtn);
mStartBtn.setOnClickListener(this);
mStopBtn = (Button)findViewById(R.id.stopBtn);
mStopBtn.setOnClickListener(this);
mResetBtn = (Button)findViewById(R.id.resetBtn);
mResetBtn.setOnClickListener(this);
mCheckBtn = (Button)findViewById(R.id.checkBtn);
mCheckBtn.setOnClickListener(this);
mHandler = new StopwatchHandler();
mAdapter = new ListAdapter(this, R.layout.stopwatch_list_block, mInfoList);
mListView = (ListView) findViewById(R.id.listView);
mListView.setAdapter(mAdapter);
mListView.setScrollbarFadingEnabled(true);
}
private class StopwatchHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what) {
case SEND_START_MESSAGE:
mTimeInMillies = System.currentTimeMillis() - mStartTime;
mFinalTime = mElapsedTime + mTimeInMillies;
int seconds = (int) (mFinalTime / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
int milliseconds = (int) (mFinalTime % 1000);
mTimerTv.setText("" + String.format("%02d", minutes) + ":" + String.format("%02d", seconds) + "." + String.format("%03d", milliseconds));
mHandler.sendEmptyMessage(SEND_START_MESSAGE);
break;
case SEND_STOP_MESSAGE:
mHandler.removeMessages(SEND_START_MESSAGE);
mElapsedTime += mTimeInMillies;
break;
case SEND_RESET_MESSAGE:
if(mIsRunning) {
mHandler.removeMessages(SEND_START_MESSAGE);
mIsRunning = false;
}
mStartTime = 0L;
mTimeInMillies = 0L;
mElapsedTime = 0L;
mFinalTime = 0L;
mTimerTv.setText("00:00.000");
break;
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.startBtn:
if(!mIsRunning) {
mStartTime = System.currentTimeMillis();
mHandler.sendEmptyMessage(SEND_START_MESSAGE);
mIsRunning = true;
}
break;
case R.id.stopBtn:
if(mIsRunning) {
mHandler.sendEmptyMessage(SEND_STOP_MESSAGE);
mIsRunning = false;
}
break;
case R.id.checkBtn:
if(!mIsRunning) {
// if(mInfoList != null && mInfoList.size() > 0) {
// String tmp = mInfoList.get(mInfoList.size()-1).getTitle().trim();
// Logger.print("tmp : " + tmp);
// Logger.print("tmp : " + mTimerTv.getText().toString());
// if(tmp.equals(mTimerTv.getText().toString())) {
// return;
// }
// }
InfoData info = new InfoData();
info.setIndex(mCount);
info.setTitle(mTimerTv.getText().toString());
mInfoList.add(info);
mAdapter.notifyDataSetChanged();
mCount++;
}
break;
case R.id.resetBtn:
mHandler.sendEmptyMessage(SEND_RESET_MESSAGE);
break;
}
}
public class ListAdapter extends ArrayAdapter<InfoData>
{
private ArrayList<InfoData> mItems;
private LayoutInflater mInflater;
public ListAdapter(Context context, int nTextViewResourceId, ArrayList<InfoData> items)
{
super(context, nTextViewResourceId, items);
this.mItems = items;
mInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
InfoData info = mItems.get(position);
if(convertView == null)
{
convertView = mInflater.inflate(R.layout.stopwatch_list_block, null);
holder = new ViewHolder();
holder.title = (TextView) convertView.findViewById(R.id.title);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.title.setText(info.getIndex() + ". " + info.getTitle());
return convertView;
}
class ViewHolder
{
TextView title;
}
}
private class InfoData
{
private int index;
private String title;
public int getIndex()
{
return index;
}
public void setIndex(int index)
{
this.index = index;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
}
}
'프로그래밍 > 안드로이드' 카테고리의 다른 글
app-ads.txt 처리하는 방법 (0) | 2020.02.13 |
---|---|
Custom view cycle. (0) | 2016.12.14 |
안드로이드 광고 모듈 (0) | 2016.11.25 |
Glide에서 디스크 캐쉬 사용하지 않게 하는 방법 (0) | 2016.09.28 |
Toast (0) | 2015.09.11 |
RECENT COMMENT