마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

longclicklistener 질문이있습니다.

0 추천

현재 맵에서 zoom in 버튼을 만들어서 클릭시 zoom in을 하고있습니다.(onclick으로 한번만 zoom in됩니다)

그런데 longclicklister를 이용해서 클릭시에 최대치까지 zoom in 을 시키고 싶은데

이런 경우에 어떻게 해야할까요? handler를 사용해야 하나요?

//button을 구현한 class

private View.OnLongClickListener mLongClickListener = new View.OnLongClickListener() {
 
@Override
public boolean onLongClick(View v) {
 
 
Object oTag = v.getTag();
if ( oTag instanceof Integer) {
int nTag = (Integer)oTag;
 
MainThread iMainThread = MainThread.getMainThread();
int mViewStep = iMainThread.getViewStep();
 
if ( nTag == TAG_BTN_ZOOM_OUT) {
if (mViewStep < MapRender.MAX_POS_STEP) {
NQButtonSound.getInstance().playSound(NQButtonSound.BTN_SOUND.BTN_ZOOM_OUT.ordinal());
}
iMainThread = MainThread.getMainThread();
if ( iMainThread != null ) {
iMainThread.zoomOut(true);
}
}
else if ( nTag == TAG_BTN_ZOOM_IN) {
if (mViewStep > MapRender.MIN_POS_STEP) {
NQButtonSound.getInstance().playSound(NQButtonSound.BTN_SOUND.BTN_ZOOM_IN.ordinal());
}
iMainThread = MainThread.getMainThread();
if ( iMainThread != null ) {
iMainThread.zoomIn_(true);
}
}
 
}
return false;
}
};
 
// longclick시 처리하는 부분
public void zoomIn_(boolean bAnim) {
 
// while(cnt >= MapRender.MIN_POS_STEP){
if(true == m_bZoomMsgsnow)
{ //ズームNGメッセージ表示中は何もしない。
return;
}
 
synchronized ( syncZoom ) {
if ( syncZoom ) {
return ;
}
syncZoom = true;
 
 
 
// if (m_nStep <= MapRender.MIN_POS_STEP) {
if(dispRender.getStep()<= MapRender.MIN_POS_STEP) {
m_bZoomMsgsnow = true;
AlertDialog.Builder builder = new AlertDialog.Builder(RoadQuest.getInstance());
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(R.string.app_name);
builder.setMessage(R.string.error_message_error_no_zoomin);
builder.setCancelable(false);
builder.setPositiveButton(R.string.btn_ok, new DialogInterface.OnClickListener() {
 
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
m_bZoomMsgsnow = false;
}
});
builder.create().show();
}
else
{
if ((displayMode==DISP_MODE_CURRENT)||(displayMode==DISP_MODE_SCROLL)||(displayMode==DISP_MODE_PIVOT))
{
if ((renderMode!=RENDER_MODE_NONE)&&(renderMode!=RENDER_MODE_NORMAL))
{
if (NaviSetting.m_nAutoScale!=3) return;
}
 
if ( bAnim ) {
if ( !mViewStepChangeAction.isEnding() )
{
mViewStepChangeAction.requestQuit();
m_nStep = mViewStepChangeAction.getEndStep();
}
 
if ( dispRender.canZoomIn(m_nStep) )
{
mViewStepChangeAction.reset(m_nStep, m_nStep-1);
}
 
else {
if ( dispRender.canZoomIn(m_nStep) ) {
dispRender.zoomIn();
m_nStep = dispRender.getPosStep();
 
this.drawScene();
 
RoadQuest.sendMessage(RoadQuest.MSG_WHAT_REFRESH, RoadQuest.MSG_ARG1_REFRESH_UI, 0);
}
 
}
}
}
}
syncZoom = false;
RoadQuest.sendMessage(RoadQuest.MSG_WHAT_REFRESH, RoadQuest.MSG_ARG1_REFRESH_UI, 0);
// try { Thread.sleep(50); } catch(Exception e) {}
// cnt--;
// }
}
}
 
// zoom in 된 뷰를 처리하는 class
public void reset(int currentStep, int targetStep) {
mCurrScale = mStartScale = 1.0f;
mBEnding=false;
mBInterrupted=false;
 
if( currentStep>targetStep) { //
mEndScale = 2.0f;
}
else if ( currentStep < targetStep) {  //
mEndScale = 0.5f;
}
else {
mBEnding=true;
}
 
mStartStep = currentStep;
mEndStep = targetStep;
 
mStartTime = System.currentTimeMillis();
mLastTime=System.currentTimeMillis()+100;
mEndTime = mLastTime+500;
// mStartTime = 1;
// mLastTime = 1;
// mEndTime = 5;
}
 
 

 

익명사용자 님이 2013년 9월 9일 질문

1개의 답변

0 추천
Map.zoomin (int)이런식으로 최대치넣어주면안되나요?
익명사용자 님이 2013년 9월 10일 답변
...