안드로이드 개발시 가장 많이 사용하는 Custom view


이때 customview가 어떻게 작동하는지 cycle을 아는게 너무 중요함





by Invincible Cooler 2016. 12. 14. 17:31

토지제도


수조권 : 조세를 거둘수 있는 권리 (주로 토지를 뜻함)


과거에는 나라를 위해서 일한 공무원(관리)에게 지금처럼 월급을 지급한 것이 아니라, 세금을 거둘수 있는 권리를 주었다. 나라가 직접 세금을 백성에게 걷는게 아니라, 수조권을 가진 공무원이 백성에게 세금을 거둔것이다. 이것이 문제가 되서(예를들면 하나의 토지에 등록된 주인이 여러명으로 중복으로 세금을 거두거나, 나눠줄 토지가 부족하여) 토지제도가 계속 변경되는 것이다.


고대 (신라 기준)


녹읍(식읍), 관료전, 정전


녹읍 : 관료에게 지급, 수조권 + 노동력

식읍 : 녹읍과 내용은 같으며, 관료가 아닌 왕족, 공신(전쟁등 공을 올린 자)에게 지급


관료전 : 녹읍에서 노동력을 제거한후 지급. 다시 말하면 조세를 수취할 권리는 있지만, 사람을 지배할 권리는 없음.


정전 : 백성에게 지급한 토지 (예 연수유전(烟受有田)·연수유답(烟受有畓))



고려

역분전 -> 전시과 -> 녹과전 -> 과전법


역분전(태조왕건) - 고려 전기의 토지제도

- 개국공신, 논공행상에 따라 분배 (후삼국 통일에 공을 세운, 신하 및 군사에게 지급함, 인품과 공로에 따라서 지급)

논공행상 : 공로가 있고 없고, 크고 적고에 따라서 상을 준다는 뜻.


전시과 (시정전시과 -> 개정전시과 -> 경정전시과) : 문무관리에게 지급하던 토지(토지 + 임야, 수조권)


시정전시과(경종-5대)

- 전직, 현직 관리에게 지급

- 관품 + 인품


개정전시과(목종-7대)


임진왜란 (1592~1598)

1. 부산 침공

2. 동래성 함락

3. 탄금대 전투 패배

4. 한성함락

5. 평양함락

6. 이순신, 한산도 대첩승리

7. 김시민, 진주대첩 승리

8. 평양성 탈활

9. 권율, 행주대첩 승리

10. 한성수복

11. 제2차 진주성 전투패배

--- 휴전 ---

12. 정유재란 발발

13. 원균, 칠천량 해전 패배

14. 이순신, 명량대첩 승리

15. 토요토미 히데요시 사망

16. 이순신, 노량해전 전사

17. 일본군 철수


간단히 정리하면, 임진왜란은 넓은 의미에서 임진왜란과 정유재란을 포함하여 임진왜란이라 합니다. 좁은 의미의 임진왜란 당시는 이순신의 한산도 대첩 뿐만 아니라, 육지에서 전투가 있었고, 정유재란 당시는 대부분 해전입니다. 한나라가 한나라를 침략할때는 침략을 당하는 쪽의 국력이 약할때도 있지만, 내분이 일어났을때 많은 침략을 당합니다. 따라서 우리도 침략을 막기위해선 강한 군사력을 갖추는 것은 당연하고, 야당 여당이 잘 협조하여 나라를 부강하게 해야 할것 같습니다. 


정묘호란(1627) 

1. 후금 공격(정묘호란 발발)

2. 인조, 강화도 피신

3. 정묘조약


병자호란(1636~1637)

1. 후금 군신관계 요구 -> 거부
2. 병자호란 발발
3. 인조, 남한산성 피란
4. 남한산성 포위
5. 인조, 삼전도 항복


위에 나열한 내용은 국립중앙 박물관의 임진왜란, 병자호란 경과 과정을 토대로 재구성 하였으며, 모든 내용을 포함하진 않았습니다. 자세한 내용은 스스로 찾아보면서, 공부하시기 바랍니다.

by Invincible Cooler 2016. 12. 2. 00:28

소스 공개합니다.


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
by Invincible Cooler 2016. 11. 29. 22:18
| 1 2 3 4 5 6 7 ··· 22 |