2014. 10. 2. 18:29

구현할 일이 있어서 소스 찾아봤는데


뭐가 그리 복잡하게 덕지덕지 붙여 놨는지


CCCV 못하게 할 거면 왜 써놓은 건지


제일 참고할 만한 자료는 퀴즈처럼 중간중간에 비워놓은 것을 짜증나서 뜯어고쳐서 적어둠.



MainActivity.java


package com.newkie.fileexplorer;


import java.io.File;

import java.util.ArrayList;

import java.util.List;


import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.os.Environment;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;


public class MainActivity extends Activity

{

    private String mFileName;

    private ListView lvFileControl;

    private Context mContext = this;


    private List<String> lItem = null;

    private List<String> lPath = null;

    private String mRoot = Environment.getExternalStorageDirectory().getAbsolutePath();

    private TextView mPath;


    

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mPath = (TextView) findViewById(R.id.tvPath);

        lvFileControl = (ListView)findViewById(R.id.lvFileControl);

        getDir(mRoot);

        

        lvFileControl.setOnItemClickListener(new OnItemClickListener(){

@Override

public void onItemClick(AdapterView<?> parent, View v, int position, long id)

{

File file = new File(lPath.get(position));


       if (file.isDirectory())

       {

           if (file.canRead())

               getDir(lPath.get(position));

           else

           {

            Toast.makeText(mContext, "No files in this folder.", Toast.LENGTH_SHORT).show();

           }

       }

       else

       {

           mFileName = file.getName();

           Log.i("Test","ext:"+mFileName.substring(mFileName.lastIndexOf('.') + 1, mFileName.length()));

       }

}

});

    }


    private void getDir(String dirPath)

    {

        mPath.setText("Location: " + dirPath);


        lItem = new ArrayList<String>();

        lPath = new ArrayList<String>();


        File f = new File(dirPath);

        File[] files = f.listFiles();


        if (!dirPath.equals(mRoot))

        {

            //item.add(root); //to root.

            //path.add(root);


            lItem.add("../"); //to parent folder

            lPath.add(f.getParent());

        }


        for (int i = 0; i < files.length; i++)

        {

            File file = files[i];

            lPath.add(file.getAbsolutePath());


            if (file.isDirectory())

                lItem.add(file.getName() + "/");

            else

                lItem.add(file.getName());

        }


        ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, lItem);

        lvFileControl.setAdapter(fileList);

    }

}



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >


    <TextView

        android:id="@+id/tvPath"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" />


    <ListView

        android:id="@+id/lvFileControl"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:divider="#ffffff" >

    </ListView>

</LinearLayout>



그리고 MANIFEST에 


    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


추가한다.


소스상에선 WRITE는 쓸 일이 없으니 빼도 무관.




간단한 소스이니 좀만 들여다보면 세부 기능 구현이 가능할 것.(root를 바꾼다거나 확장자에 따라서 눌렀을때 처리한다거나)

Posted by newkie
2014. 8. 19. 11:29

USB Connector를 이용한 어플 개발 중 USB를 꽂을때마다 해당 앱이 자동실행+중복실행되었다.


singleinstance singletask singletop 전부 무용지물.


별별 방법을 다 쓰다가 소스상으로 원천봉쇄하는데 성공


private static boolean isAppRunning = false;

private boolean isDuple = false;


@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

Log.i(TAG,"onCreate");

setContentView(R.layout.splash);

if(isAppRunning)

{

isDuple = true;

finish();

}

else

{

isAppRunning = true;

//이후 정상적으로 실행할 부분

//

//

}

}



@Override

public void onDestroy()

{

super.onDestroy();

Log.i(TAG,"onDestroy");

if(isDuple)

{


}

else

{

isAppRunning = false;

}

}


마지막은 !isDuple로 바로 끝나도 될 것.

static변수는 어플이 중복실행되어도 변하지 않는다는 점을 이용했다.

이제 고민은 어플이 실행 중 사망하셨을 때 이 루틴이 어떻게 처리될 것인가 하는 것.


Posted by newkie
2013. 11. 26. 14:28

Javascript Interface 사용


http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29


webView.addJavascriptInterface(new Object() {

    @JavascriptInterface

    public String toString() {

        return "AppInterface";

    }

    @JavascriptInterface

    public void toast(String text) {

        Toast.makeText(WebViewActivity.this, text, Toast.LENGTH_LONG).show();

    }

}, "AppInterface");


예) HTML 코드

<a href="javascript:AppInterface.toast('Hello');">Javascript Interface Test : Toast</a><br />

Posted by newkie
2013. 8. 5. 09:48

 * NMapViewer.java $version 2010. 1. 1

 * 

 * Copyright 2010 NHN Corp. All rights Reserved. 

 * NHN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. 

 */


package com.nhn.android.mapviewer;


import android.content.Context;

import android.content.Intent;

import android.content.SharedPreferences;

import android.graphics.Rect;

import android.os.Bundle;

import android.os.Handler;

import android.provider.Settings;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.MotionEvent;

import android.view.SubMenu;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

import android.widget.Toast;


import com.nhn.android.maps.NMapActivity;

import com.nhn.android.maps.NMapCompassManager;

import com.nhn.android.maps.NMapController;

import com.nhn.android.maps.NMapLocationManager;

import com.nhn.android.maps.NMapOverlay;

import com.nhn.android.maps.NMapOverlayItem;

import com.nhn.android.maps.NMapView;

import com.nhn.android.maps.maplib.NGeoPoint;

import com.nhn.android.maps.nmapmodel.NMapError;

import com.nhn.android.maps.nmapmodel.NMapPlacemark;

import com.nhn.android.maps.overlay.NMapCircleData;

import com.nhn.android.maps.overlay.NMapCircleStyle;

import com.nhn.android.maps.overlay.NMapPOIdata;

import com.nhn.android.maps.overlay.NMapPOIitem;

import com.nhn.android.maps.overlay.NMapPathData;

import com.nhn.android.maps.overlay.NMapPathLineStyle;

import com.nhn.android.mapviewer.overlay.NMapCalloutCustomOverlay;

import com.nhn.android.mapviewer.overlay.NMapCalloutOverlay;

import com.nhn.android.mapviewer.overlay.NMapMyLocationOverlay;

import com.nhn.android.mapviewer.overlay.NMapOverlayManager;

import com.nhn.android.mapviewer.overlay.NMapPOIdataOverlay;

import com.nhn.android.mapviewer.overlay.NMapPathDataOverlay;


/**

 * Sample class for map viewer library.

 * 

 * @author kyjkim

 */

public class NMapViewer extends NMapActivity {

private static final String LOG_TAG = "NMapViewer";

private static final boolean DEBUG = false;


// set your API key which is registered for NMapViewer library.

private static final String API_KEY = "https://dev.naver.com/openapi/register에서 인증받은 키";


private MapContainerView mMapContainerView;


private NMapView mMapView;

private NMapController mMapController;


private static final NGeoPoint NMAP_LOCATION_DEFAULT = new NGeoPoint(126.978371, 37.5666091);

private static final int NMAP_ZOOMLEVEL_DEFAULT = 11;

private static final int NMAP_VIEW_MODE_DEFAULT = NMapView.VIEW_MODE_VECTOR;

private static final boolean NMAP_TRAFFIC_MODE_DEFAULT = false;

private static final boolean NMAP_BICYCLE_MODE_DEFAULT = false;


private static final String KEY_ZOOM_LEVEL = "NMapViewer.zoomLevel";

private static final String KEY_CENTER_LONGITUDE = "NMapViewer.centerLongitudeE6";

private static final String KEY_CENTER_LATITUDE = "NMapViewer.centerLatitudeE6";

private static final String KEY_VIEW_MODE = "NMapViewer.viewMode";

private static final String KEY_TRAFFIC_MODE = "NMapViewer.trafficMode";

private static final String KEY_BICYCLE_MODE = "NMapViewer.bicycleMode";


private SharedPreferences mPreferences;


private NMapOverlayManager mOverlayManager;


private NMapMyLocationOverlay mMyLocationOverlay;

private NMapLocationManager mMapLocationManager;

private NMapCompassManager mMapCompassManager;


private NMapViewerResourceProvider mMapViewerResourceProvider;


private NMapPOIdataOverlay mFloatingPOIdataOverlay;

private NMapPOIitem mFloatingPOIitem;


private static boolean USE_XML_LAYOUT = false;


/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);


if (USE_XML_LAYOUT) {//커스텀 xml을 구성하여 NMap을 보여줄 수 있음.(크기조정. 버튼 등의 이벤트 구현)

setContentView(R.layout.main);


mMapView = (NMapView)findViewById(R.id.mapView);

} else {//전체화면

// create map view

mMapView = new NMapView(this);


// create parent view to rotate map view

mMapContainerView = new MapContainerView(this);

mMapContainerView.addView(mMapView);


// set the activity content to the parent view

setContentView(mMapContainerView);

}


// set a registered API key for Open MapViewer Library

mMapView.setApiKey(API_KEY);


// initialize map view

mMapView.setClickable(true);

mMapView.setEnabled(true);

mMapView.setFocusable(true);

mMapView.setFocusableInTouchMode(true);

mMapView.requestFocus();


// register listener for map state changes

mMapView.setOnMapStateChangeListener(onMapViewStateChangeListener);

mMapView.setOnMapViewTouchEventListener(onMapViewTouchEventListener);

mMapView.setOnMapViewDelegate(onMapViewTouchDelegate);


// use map controller to zoom in/out, pan and set map center, zoom level etc.

mMapController = mMapView.getMapController();


// use built in zoom controls

NMapView.LayoutParams lp = new NMapView.LayoutParams(LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT, NMapView.LayoutParams.BOTTOM_RIGHT);

mMapView.setBuiltInZoomControls(true, lp);


// create resource provider

mMapViewerResourceProvider = new NMapViewerResourceProvider(this);


// set data provider listener

super.setMapDataProviderListener(onDataProviderListener);


// create overlay manager

mOverlayManager = new NMapOverlayManager(this, mMapView, mMapViewerResourceProvider);

// register callout overlay listener to customize it.

mOverlayManager.setOnCalloutOverlayListener(onCalloutOverlayListener);

// register callout overlay view listener to customize it.

mOverlayManager.setOnCalloutOverlayViewListener(onCalloutOverlayViewListener);


// location manager

mMapLocationManager = new NMapLocationManager(this);

mMapLocationManager.setOnLocationChangeListener(onMyLocationChangeListener);


// compass manager

mMapCompassManager = new NMapCompassManager(this);


// create my location overlay

mMyLocationOverlay = mOverlayManager.createMyLocationOverlay(mMapLocationManager, mMapCompassManager);

}


@Override

protected void onStart() {

super.onStart();

}


@Override

protected void onResume() {

super.onResume();

}


@Override

protected void onStop() {


stopMyLocation();


super.onStop();

}


@Override

protected void onDestroy() {


// save map view state such as map center position and zoom level.

saveInstanceState();


super.onDestroy();

}


/* Test Functions */


private void startMyLocation() {//내 위치 찾아서 이동. 각 부분은 정확히 파악이 안됨.


if (mMyLocationOverlay != null) {

if (!mOverlayManager.hasOverlay(mMyLocationOverlay)) {

mOverlayManager.addOverlay(mMyLocationOverlay);

}


if (mMapLocationManager.isMyLocationEnabled()) {


if (!mMapView.isAutoRotateEnabled()) {

mMyLocationOverlay.setCompassHeadingVisible(true);


mMapCompassManager.enableCompass();


mMapView.setAutoRotateEnabled(true, false);


mMapContainerView.requestLayout();

} else {

stopMyLocation();

}


mMapView.postInvalidate();

} else {

boolean isMyLocationEnabled = mMapLocationManager.enableMyLocation(true);

if (!isMyLocationEnabled) {

Toast.makeText(NMapViewer.this, "Please enable a My Location source in system settings",

Toast.LENGTH_LONG).show();


Intent goToSettings = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);

startActivity(goToSettings);


return;

}

}

}

}


private void stopMyLocation() {

if (mMyLocationOverlay != null) {

mMapLocationManager.disableMyLocation();


if (mMapView.isAutoRotateEnabled()) {

mMyLocationOverlay.setCompassHeadingVisible(false);


mMapCompassManager.disableCompass();


mMapView.setAutoRotateEnabled(false, false);


mMapContainerView.requestLayout();

}

}

}


private void testPathDataOverlay() {//경로표시인데 위경도 정확하게 각 경로를 알지 못하는 이상 별 쓸모 없는 기능...


// set path data points

NMapPathData pathData = new NMapPathData(9);


pathData.initPathData();

pathData.addPathPoint(127.108099, 37.366034, NMapPathLineStyle.TYPE_SOLID);

pathData.addPathPoint(127.108088, 37.366043, 0);

pathData.addPathPoint(127.108079, 37.365619, 0);

pathData.addPathPoint(127.107458, 37.365608, 0);

pathData.addPathPoint(127.107232, 37.365608, 0);

pathData.addPathPoint(127.106904, 37.365624, 0);

pathData.addPathPoint(127.105933, 37.365621, NMapPathLineStyle.TYPE_DASH);

pathData.addPathPoint(127.105929, 37.366378, 0);

pathData.addPathPoint(127.106279, 37.366380, 0);

pathData.endPathData();


NMapPathDataOverlay pathDataOverlay = mOverlayManager.createPathDataOverlay(pathData);

if (pathDataOverlay != null) {


// add path data with polygon type

NMapPathData pathData2 = new NMapPathData(4);

pathData2.initPathData();

pathData2.addPathPoint(127.106, 37.367, NMapPathLineStyle.TYPE_SOLID);

pathData2.addPathPoint(127.107, 37.367, 0);

pathData2.addPathPoint(127.107, 37.368, 0);

pathData2.addPathPoint(127.106, 37.368, 0);

pathData2.endPathData();

pathDataOverlay.addPathData(pathData2);

// set path line style

NMapPathLineStyle pathLineStyle = new NMapPathLineStyle(mMapView.getContext());

pathLineStyle.setPataDataType(NMapPathLineStyle.DATA_TYPE_POLYGON);

pathLineStyle.setLineColor(0xA04DD2, 0xff);

pathLineStyle.setFillColor(0xFFFFFF, 0x00);

pathData2.setPathLineStyle(pathLineStyle);


// add circle data

NMapCircleData circleData = new NMapCircleData(1);

circleData.initCircleData();

circleData.addCirclePoint(127.1075, 37.3675, 50.0F);

circleData.endCircleData();

pathDataOverlay.addCircleData(circleData);

// set circle style

NMapCircleStyle circleStyle = new NMapCircleStyle(mMapView.getContext());

circleStyle.setLineType(NMapPathLineStyle.TYPE_DASH);

circleStyle.setFillColor(0x000000, 0x00);

circleData.setCircleStyle(circleStyle);


// show all path data

pathDataOverlay.showAllPathData(0);

}

}


private void testPathPOIdataOverlay() {


// set POI data

NMapPOIdata poiData = new NMapPOIdata(4, mMapViewerResourceProvider, true);

poiData.beginPOIdata(4);

poiData.addPOIitem(349652983, 149297368, "Pizza 124-456", NMapPOIflagType.FROM, null);

poiData.addPOIitem(349652966, 149296906, null, NMapPOIflagType.NUMBER_BASE + 1, null);

poiData.addPOIitem(349651062, 149296913, null, NMapPOIflagType.NUMBER_BASE + 999, null);

poiData.addPOIitem(349651376, 149297750, "Pizza 000-999", NMapPOIflagType.TO, null);

poiData.endPOIdata();


// create POI data overlay

NMapPOIdataOverlay poiDataOverlay = mOverlayManager.createPOIdataOverlay(poiData, null);


// set event listener to the overlay

poiDataOverlay.setOnStateChangeListener(onPOIdataStateChangeListener);


}


private void testPOIdataOverlay() {//위치 표시. 이곳에서 각 필요한 위치정보를 배열로 받아와서 전부 표시해 줄 수 있다.


// Markers for POI item

int markerId = NMapPOIflagType.PIN;


// set POI data

NMapPOIdata poiData = new NMapPOIdata(2, mMapViewerResourceProvider);

poiData.beginPOIdata(2);

NMapPOIitem item = poiData.addPOIitem(127.0630205, 37.5091300, "Pizza 777-111", markerId, 0);

item.setRightAccessory(true, NMapPOIflagType.CLICKABLE_ARROW);

poiData.addPOIitem(127.061, 37.51, "Pizza 123-456", markerId, 0);//이 방식대로 위경도 맞춰서 for문 돌리면 됨.

poiData.endPOIdata();


// create POI data overlay

NMapPOIdataOverlay poiDataOverlay = mOverlayManager.createPOIdataOverlay(poiData, null);


// set event listener to the overlay

poiDataOverlay.setOnStateChangeListener(onPOIdataStateChangeListener);


// select an item

poiDataOverlay.selectPOIitem(0, true);


// show all POI data

//poiDataOverlay.showAllPOIdata(0);

}


private void testFloatingPOIdataOverlay() {//??

// Markers for POI item

int marker1 = NMapPOIflagType.PIN;


// set POI data

NMapPOIdata poiData = new NMapPOIdata(1, mMapViewerResourceProvider);

poiData.beginPOIdata(1);

NMapPOIitem item = poiData.addPOIitem(null, "Touch & Drag to Move", marker1, 0);

if (item != null) {

// initialize location to the center of the map view.

item.setPoint(mMapController.getMapCenter());

// set floating mode

item.setFloatingMode(NMapPOIitem.FLOATING_TOUCH | NMapPOIitem.FLOATING_DRAG);

// show right button on callout

item.setRightButton(true);


mFloatingPOIitem = item;

}

poiData.endPOIdata();


// create POI data overlay

NMapPOIdataOverlay poiDataOverlay = mOverlayManager.createPOIdataOverlay(poiData, null);

if (poiDataOverlay != null) {

poiDataOverlay.setOnFloatingItemChangeListener(onPOIdataFloatingItemChangeListener);


// set event listener to the overlay

poiDataOverlay.setOnStateChangeListener(onPOIdataStateChangeListener);


poiDataOverlay.selectPOIitem(0, false);


mFloatingPOIdataOverlay = poiDataOverlay;

}

}


/* NMapDataProvider Listener */

private final NMapActivity.OnDataProviderListener onDataProviderListener = new NMapActivity.OnDataProviderListener() {


@Override

public void onReverseGeocoderResponse(NMapPlacemark placeMark, NMapError errInfo) {


if (DEBUG) {

Log.i(LOG_TAG, "onReverseGeocoderResponse: placeMark="

+ ((placeMark != null) ? placeMark.toString() : null));

}


if (errInfo != null) {

Log.e(LOG_TAG, "Failed to findPlacemarkAtLocation: error=" + errInfo.toString());


Toast.makeText(NMapViewer.this, errInfo.toString(), Toast.LENGTH_LONG).show();

return;

}


if (mFloatingPOIitem != null && mFloatingPOIdataOverlay != null) {

mFloatingPOIdataOverlay.deselectFocusedPOIitem();


if (placeMark != null) {

mFloatingPOIitem.setTitle(placeMark.toString());

}

mFloatingPOIdataOverlay.selectPOIitemBy(mFloatingPOIitem.getId(), false);

}

}


};


/* MyLocation Listener */

private final NMapLocationManager.OnLocationChangeListener onMyLocationChangeListener = new NMapLocationManager.OnLocationChangeListener() {


@Override

public boolean onLocationChanged(NMapLocationManager locationManager, NGeoPoint myLocation) {


if (mMapController != null) {

mMapController.animateTo(myLocation);

}


return true;

}


@Override

public void onLocationUpdateTimeout(NMapLocationManager locationManager) {


// stop location updating

// Runnable runnable = new Runnable() {

// public void run() {

// stopMyLocation();

// }

// };

// runnable.run();


Toast.makeText(NMapViewer.this, "Your current location is temporarily unavailable.", Toast.LENGTH_LONG).show();

}


@Override

public void onLocationUnavailableArea(NMapLocationManager locationManager, NGeoPoint myLocation) {


Toast.makeText(NMapViewer.this, "Your current location is unavailable area.", Toast.LENGTH_LONG).show();


stopMyLocation();

}


};


/* MapView State Change Listener*/

private final NMapView.OnMapStateChangeListener onMapViewStateChangeListener = new NMapView.OnMapStateChangeListener() {


@Override

public void onMapInitHandler(NMapView mapView, NMapError errorInfo) {


if (errorInfo == null) { // success

// restore map view state such as map center position and zoom level.

restoreInstanceState();


} else { // fail

Log.e(LOG_TAG, "onFailedToInitializeWithError: " + errorInfo.toString());


Toast.makeText(NMapViewer.this, errorInfo.toString(), Toast.LENGTH_LONG).show();

}

}


@Override

public void onAnimationStateChange(NMapView mapView, int animType, int animState) {

if (DEBUG) {

Log.i(LOG_TAG, "onAnimationStateChange: animType=" + animType + ", animState=" + animState);

}

}


@Override

public void onMapCenterChange(NMapView mapView, NGeoPoint center) {

if (DEBUG) {

Log.i(LOG_TAG, "onMapCenterChange: center=" + center.toString());

}

}


@Override

public void onZoomLevelChange(NMapView mapView, int level) {

if (DEBUG) {

Log.i(LOG_TAG, "onZoomLevelChange: level=" + level);

}

}


@Override

public void onMapCenterChangeFine(NMapView mapView) {


}

};


private final NMapView.OnMapViewTouchEventListener onMapViewTouchEventListener = new NMapView.OnMapViewTouchEventListener() {


@Override

public void onLongPress(NMapView mapView, MotionEvent ev) {

// TODO Auto-generated method stub


}


@Override

public void onLongPressCanceled(NMapView mapView) {

// TODO Auto-generated method stub


}


@Override

public void onSingleTapUp(NMapView mapView, MotionEvent ev) {

// TODO Auto-generated method stub


}


@Override

public void onTouchDown(NMapView mapView, MotionEvent ev) {


}


@Override

public void onScroll(NMapView mapView, MotionEvent e1, MotionEvent e2) {

}


@Override

public void onTouchUp(NMapView mapView, MotionEvent ev) {

// TODO Auto-generated method stub


}


};


private final NMapView.OnMapViewDelegate onMapViewTouchDelegate = new NMapView.OnMapViewDelegate() {


@Override

public boolean isLocationTracking() {

if (mMapLocationManager != null) {

if (mMapLocationManager.isMyLocationEnabled()) {

return mMapLocationManager.isMyLocationFixed();

}

}

return false;

}


};


/* POI data State Change Listener*/

private final NMapPOIdataOverlay.OnStateChangeListener onPOIdataStateChangeListener = new NMapPOIdataOverlay.OnStateChangeListener() {


@Override

public void onCalloutClick(NMapPOIdataOverlay poiDataOverlay, NMapPOIitem item) {

if (DEBUG) {

Log.i(LOG_TAG, "onCalloutClick: title=" + item.getTitle());

}


// [[TEMP]] handle a click event of the callout

Toast.makeText(NMapViewer.this, "onCalloutClick: " + item.getTitle(), Toast.LENGTH_LONG).show();

}


@Override

public void onFocusChanged(NMapPOIdataOverlay poiDataOverlay, NMapPOIitem item) {

if (DEBUG) {

if (item != null) {

Log.i(LOG_TAG, "onFocusChanged: " + item.toString());

} else {

Log.i(LOG_TAG, "onFocusChanged: ");

}

}

}

};


private final NMapPOIdataOverlay.OnFloatingItemChangeListener onPOIdataFloatingItemChangeListener = new NMapPOIdataOverlay.OnFloatingItemChangeListener() {


@Override

public void onPointChanged(NMapPOIdataOverlay poiDataOverlay, NMapPOIitem item) {

NGeoPoint point = item.getPoint();


if (DEBUG) {

Log.i(LOG_TAG, "onPointChanged: point=" + point.toString());

}


findPlacemarkAtLocation(point.longitude, point.latitude);


item.setTitle(null);


}

};


private final NMapOverlayManager.OnCalloutOverlayListener onCalloutOverlayListener = new NMapOverlayManager.OnCalloutOverlayListener() {


@Override

public NMapCalloutOverlay onCreateCalloutOverlay(NMapOverlay itemOverlay, NMapOverlayItem overlayItem,

Rect itemBounds) {


// handle overlapped items

if (itemOverlay instanceof NMapPOIdataOverlay) {

NMapPOIdataOverlay poiDataOverlay = (NMapPOIdataOverlay)itemOverlay;


// check if it is selected by touch event

if (!poiDataOverlay.isFocusedBySelectItem()) {

int countOfOverlappedItems = 1;


NMapPOIdata poiData = poiDataOverlay.getPOIdata();

for (int i = 0; i < poiData.count(); i++) {

NMapPOIitem poiItem = poiData.getPOIitem(i);


// skip selected item

if (poiItem == overlayItem) {

continue;

}


// check if overlapped or not

if (Rect.intersects(poiItem.getBoundsInScreen(), overlayItem.getBoundsInScreen())) {

countOfOverlappedItems++;

}

}


if (countOfOverlappedItems > 1) {

String text = countOfOverlappedItems + " overlapped items for " + overlayItem.getTitle();

Toast.makeText(NMapViewer.this, text, Toast.LENGTH_LONG).show();

return null;

}

}

}


// use custom old callout overlay

if (overlayItem instanceof NMapPOIitem) {

NMapPOIitem poiItem = (NMapPOIitem)overlayItem;


if (poiItem.showRightButton()) {

return new NMapCalloutCustomOldOverlay(itemOverlay, overlayItem, itemBounds,

mMapViewerResourceProvider);

}

}


// use custom callout overlay

return new NMapCalloutCustomOverlay(itemOverlay, overlayItem, itemBounds, mMapViewerResourceProvider);


// set basic callout overlay

//return new NMapCalloutBasicOverlay(itemOverlay, overlayItem, itemBounds);

}


};


private final NMapOverlayManager.OnCalloutOverlayViewListener onCalloutOverlayViewListener = new NMapOverlayManager.OnCalloutOverlayViewListener() {


@Override

public View onCreateCalloutOverlayView(NMapOverlay itemOverlay, NMapOverlayItem overlayItem, Rect itemBounds) {


if (overlayItem != null) {

// [TEST] 말풍선 오버레이를 뷰로 설정함

String title = overlayItem.getTitle();

if (title != null && title.length() > 5) {

return new NMapCalloutCustomOverlayView(NMapViewer.this, itemOverlay, overlayItem, itemBounds);

}

}


// null을 반환하면 말풍선 오버레이를 표시하지 않음

return null;

}


};


/* Local Functions */


private void restoreInstanceState() {//저장한 정보를 읽어와서 세팅

mPreferences = getPreferences(MODE_PRIVATE);


int longitudeE6 = mPreferences.getInt(KEY_CENTER_LONGITUDE, NMAP_LOCATION_DEFAULT.getLongitudeE6());

int latitudeE6 = mPreferences.getInt(KEY_CENTER_LATITUDE, NMAP_LOCATION_DEFAULT.getLatitudeE6());

int level = mPreferences.getInt(KEY_ZOOM_LEVEL, NMAP_ZOOMLEVEL_DEFAULT);

int viewMode = mPreferences.getInt(KEY_VIEW_MODE, NMAP_VIEW_MODE_DEFAULT);

boolean trafficMode = mPreferences.getBoolean(KEY_TRAFFIC_MODE, NMAP_TRAFFIC_MODE_DEFAULT);

boolean bicycleMode = mPreferences.getBoolean(KEY_BICYCLE_MODE, NMAP_BICYCLE_MODE_DEFAULT);


mMapController.setMapViewMode(viewMode);

mMapController.setMapViewTrafficMode(trafficMode);

mMapController.setMapViewBicycleMode(bicycleMode);

mMapController.setMapCenter(new NGeoPoint(longitudeE6, latitudeE6), level);//입력된 위경도+줌레벨을 현재 화면 가운데로 이동.

}


private void saveInstanceState() {//모든 정보를 저장(센터,줌 등)

if (mPreferences == null) {

return;

}


NGeoPoint center = mMapController.getMapCenter();

int level = mMapController.getZoomLevel();

int viewMode = mMapController.getMapViewMode();

boolean trafficMode = mMapController.getMapViewTrafficMode();

boolean bicycleMode = mMapController.getMapViewBicycleMode();


SharedPreferences.Editor edit = mPreferences.edit();


edit.putInt(KEY_CENTER_LONGITUDE, center.getLongitudeE6());

edit.putInt(KEY_CENTER_LATITUDE, center.getLatitudeE6());

edit.putInt(KEY_ZOOM_LEVEL, level);

edit.putInt(KEY_VIEW_MODE, viewMode);

edit.putBoolean(KEY_TRAFFIC_MODE, trafficMode);

edit.putBoolean(KEY_BICYCLE_MODE, bicycleMode);


edit.commit();


}


/* Menus */

private static final int MENU_ITEM_CLEAR_MAP = 10;

private static final int MENU_ITEM_MAP_MODE = 20;

private static final int MENU_ITEM_MAP_MODE_SUB_VECTOR = MENU_ITEM_MAP_MODE + 1;

private static final int MENU_ITEM_MAP_MODE_SUB_SATELLITE = MENU_ITEM_MAP_MODE + 2;

private static final int MENU_ITEM_MAP_MODE_SUB_TRAFFIC = MENU_ITEM_MAP_MODE + 3;

private static final int MENU_ITEM_MAP_MODE_SUB_BICYCLE = MENU_ITEM_MAP_MODE + 4;

private static final int MENU_ITEM_ZOOM_CONTROLS = 30;

private static final int MENU_ITEM_MY_LOCATION = 40;


private static final int MENU_ITEM_TEST_MODE = 50;

private static final int MENU_ITEM_TEST_POI_DATA = MENU_ITEM_TEST_MODE + 1;

private static final int MENU_ITEM_TEST_PATH_DATA = MENU_ITEM_TEST_MODE + 2;

private static final int MENU_ITEM_TEST_FLOATING_DATA = MENU_ITEM_TEST_MODE + 3;

private static final int MENU_ITEM_TEST_AUTO_ROTATE = MENU_ITEM_TEST_MODE + 4;


/**

* Invoked during init to give the Activity a chance to set up its Menu.

* @param menu the Menu to which entries may be added

* @return true

*/

@Override

public boolean onCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);


MenuItem menuItem = null;

SubMenu subMenu = null;


menuItem = menu.add(Menu.NONE, MENU_ITEM_CLEAR_MAP, Menu.CATEGORY_SECONDARY, "초기화");

menuItem.setAlphabeticShortcut('c');

menuItem.setIcon(android.R.drawable.ic_menu_revert);


subMenu = menu.addSubMenu(Menu.NONE, MENU_ITEM_MAP_MODE, Menu.CATEGORY_SECONDARY, "지도보기");

subMenu.setIcon(android.R.drawable.ic_menu_mapmode);


menuItem = subMenu.add(0, MENU_ITEM_MAP_MODE_SUB_VECTOR, Menu.NONE, "일반지도");

menuItem.setAlphabeticShortcut('m');

menuItem.setCheckable(true);

menuItem.setChecked(false);


menuItem = subMenu.add(0, MENU_ITEM_MAP_MODE_SUB_SATELLITE, Menu.NONE, "위성지도");

menuItem.setAlphabeticShortcut('s');

menuItem.setCheckable(true);

menuItem.setChecked(false);


menuItem = subMenu.add(0, MENU_ITEM_MAP_MODE_SUB_TRAFFIC, Menu.NONE, "실시간교통");

menuItem.setAlphabeticShortcut('t');

menuItem.setCheckable(true);

menuItem.setChecked(false);


menuItem = subMenu.add(0, MENU_ITEM_MAP_MODE_SUB_BICYCLE, Menu.NONE, "자전거지도");

menuItem.setAlphabeticShortcut('b');

menuItem.setCheckable(true);

menuItem.setChecked(false);


menuItem = menu.add(0, MENU_ITEM_ZOOM_CONTROLS, Menu.CATEGORY_SECONDARY, "Zoom Controls");

menuItem.setAlphabeticShortcut('z');

menuItem.setIcon(android.R.drawable.ic_menu_zoom);


menuItem = menu.add(0, MENU_ITEM_MY_LOCATION, Menu.CATEGORY_SECONDARY, "내위치");

menuItem.setAlphabeticShortcut('l');

menuItem.setIcon(android.R.drawable.ic_menu_mylocation);


subMenu = menu.addSubMenu(Menu.NONE, MENU_ITEM_TEST_MODE, Menu.CATEGORY_SECONDARY, "테스트");

subMenu.setIcon(android.R.drawable.ic_menu_more);


menuItem = subMenu.add(0, MENU_ITEM_TEST_POI_DATA, Menu.NONE, "마커 표시");

menuItem.setAlphabeticShortcut('p');


menuItem = subMenu.add(0, MENU_ITEM_TEST_PATH_DATA, Menu.NONE, "경로선 표시");

menuItem.setAlphabeticShortcut('t');


menuItem = subMenu.add(0, MENU_ITEM_TEST_FLOATING_DATA, Menu.NONE, "직접 지정");

menuItem.setAlphabeticShortcut('f');


menuItem = subMenu.add(0, MENU_ITEM_TEST_AUTO_ROTATE, Menu.NONE, "지도 회전");

menuItem.setAlphabeticShortcut('a');


return true;

}


@Override

public boolean onPrepareOptionsMenu(Menu pMenu) {

super.onPrepareOptionsMenu(pMenu);


int viewMode = mMapController.getMapViewMode();

boolean isTraffic = mMapController.getMapViewTrafficMode();

boolean isBicycle = mMapController.getMapViewBicycleMode();


pMenu.findItem(MENU_ITEM_CLEAR_MAP).setEnabled(

(viewMode != NMapView.VIEW_MODE_VECTOR) || isTraffic || mOverlayManager.sizeofOverlays() > 0);

pMenu.findItem(MENU_ITEM_MAP_MODE_SUB_VECTOR).setChecked(viewMode == NMapView.VIEW_MODE_VECTOR);

pMenu.findItem(MENU_ITEM_MAP_MODE_SUB_SATELLITE).setChecked(viewMode == NMapView.VIEW_MODE_HYBRID);

pMenu.findItem(MENU_ITEM_MAP_MODE_SUB_TRAFFIC).setChecked(isTraffic);

pMenu.findItem(MENU_ITEM_MAP_MODE_SUB_BICYCLE).setChecked(isBicycle);


if (mMyLocationOverlay == null) {

pMenu.findItem(MENU_ITEM_MY_LOCATION).setEnabled(false);

}


return true;

}


/**

* Invoked when the user selects an item from the Menu.

* @param item the Menu entry which was selected

* @return true if the Menu item was legit (and we consumed it), false

*         otherwise

*/

@Override

public boolean onOptionsItemSelected(MenuItem item) {


switch (item.getItemId()) {

case MENU_ITEM_CLEAR_MAP:

if (mMyLocationOverlay != null) {

stopMyLocation();

mOverlayManager.removeOverlay(mMyLocationOverlay);

}


mMapController.setMapViewMode(NMapView.VIEW_MODE_VECTOR);

mMapController.setMapViewTrafficMode(false);

mMapController.setMapViewBicycleMode(false);


mOverlayManager.clearOverlays();


return true;


case MENU_ITEM_MAP_MODE_SUB_VECTOR:

mMapController.setMapViewMode(NMapView.VIEW_MODE_VECTOR);

return true;


case MENU_ITEM_MAP_MODE_SUB_SATELLITE:

mMapController.setMapViewMode(NMapView.VIEW_MODE_HYBRID);

return true;


case MENU_ITEM_MAP_MODE_SUB_TRAFFIC:

mMapController.setMapViewTrafficMode(!mMapController.getMapViewTrafficMode());

return true;


case MENU_ITEM_MAP_MODE_SUB_BICYCLE:

mMapController.setMapViewBicycleMode(!mMapController.getMapViewBicycleMode());

return true;


case MENU_ITEM_ZOOM_CONTROLS:

mMapView.displayZoomControls(true);

return true;


case MENU_ITEM_MY_LOCATION:

startMyLocation();

return true;


case MENU_ITEM_TEST_POI_DATA:

mOverlayManager.clearOverlays();


// add POI data overlay

testPOIdataOverlay();

return true;


case MENU_ITEM_TEST_PATH_DATA:

mOverlayManager.clearOverlays();


// add path data overlay

testPathDataOverlay();


// add path POI data overlay

testPathPOIdataOverlay();

return true;


case MENU_ITEM_TEST_FLOATING_DATA:

mOverlayManager.clearOverlays();

testFloatingPOIdataOverlay();

return true;


case MENU_ITEM_TEST_AUTO_ROTATE:

if (mMapView.isAutoRotateEnabled()) {

mMapView.setAutoRotateEnabled(false, false);


mMapContainerView.requestLayout();


mHnadler.removeCallbacks(mTestAutoRotation);

} else {


mMapView.setAutoRotateEnabled(true, false);


mMapView.setRotateAngle(30);

mHnadler.postDelayed(mTestAutoRotation, AUTO_ROTATE_INTERVAL);


mMapContainerView.requestLayout();

}

return true;

}


return super.onOptionsItemSelected(item);

}


private static final long AUTO_ROTATE_INTERVAL = 2000;

private final Handler mHnadler = new Handler();

private final Runnable mTestAutoRotation = new Runnable() {

@Override

public void run() {

//         if (mMapView.isAutoRotateEnabled()) {

//     float degree = (float)Math.random()*360;

//    

//     degree = mMapView.getRoateAngle() + 30;

//

//     mMapView.setRotateAngle(degree);

//            

//             mHnadler.postDelayed(mTestAutoRotation, AUTO_ROTATE_INTERVAL);        

//         }

}

};


/** 

* Container view class to rotate map view.

*/

private class MapContainerView extends ViewGroup {


public MapContainerView(Context context) {

super(context);

}


@Override

protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

final int width = getWidth();

final int height = getHeight();

final int count = getChildCount();

for (int i = 0; i < count; i++) {

final View view = getChildAt(i);

final int childWidth = view.getMeasuredWidth();

final int childHeight = view.getMeasuredHeight();

final int childLeft = (width - childWidth) / 2;

final int childTop = (height - childHeight) / 2;

view.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);

}


if (changed) {

mOverlayManager.onSizeChanged(width, height);

}

}


@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

int w = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);

int h = getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec);

int sizeSpecWidth = widthMeasureSpec;

int sizeSpecHeight = heightMeasureSpec;


final int count = getChildCount();

for (int i = 0; i < count; i++) {

final View view = getChildAt(i);


if (view instanceof NMapView) {

if (mMapView.isAutoRotateEnabled()) {

int diag = (((int)(Math.sqrt(w * w + h * h)) + 1) / 2 * 2);

sizeSpecWidth = MeasureSpec.makeMeasureSpec(diag, MeasureSpec.EXACTLY);

sizeSpecHeight = sizeSpecWidth;

}

}


view.measure(sizeSpecWidth, sizeSpecHeight);

}

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

}

}


'안드로이드' 카테고리의 다른 글

파일 탐색기  (0) 2014.10.02
어플리케이션 중복 실행 방지  (0) 2014.08.19
WheelView(WheelPicker) Click Event  (0) 2013.07.01
앱에서 카카오톡으로 메세지,그림 보내기  (0) 2013.06.28
EditText 키보드 imeOptions  (0) 2013.05.22
Posted by newkie
2013. 7. 1. 15:03

휠뷰 소스를 다운받아 실제로 적용해 봤더니 클릭리스너를 달았을 때 가운데 위치한(선택된) 항목에 클릭이벤트를 먹지 않는다.


추적결과


WheelView.java


@Override

public boolean onTouchEvent(MotionEvent event) {

if (!isEnabled() || getViewAdapter() == null) {

return true;

}

switch (event.getAction()) {

   case MotionEvent.ACTION_MOVE:

       if (getParent() != null) {

           getParent().requestDisallowInterceptTouchEvent(true);

       }

       break;

       

   case MotionEvent.ACTION_UP:

       if (!isScrollingPerformed) {

           int distance = (int) event.getY() - getHeight() / 2;

           if (distance > 0) {

               distance += getItemHeight() / 2;

           } else {

                        distance -= getItemHeight() / 2;

           }

           int items = distance / getItemHeight();

            Log.i("WheelView","======items====="+items);

            //if (items != 0 && isValidItemIndex(currentItem + items)) { <------------이부분

            if (isValidItemIndex(currentItem + items)) {

                   notifyClickListenersAboutClick(currentItem + items);

           }

       }

       break;

}


return scroller.onTouchEvent(event);

}


가운데를 클릭하면 저기서 씹혀서 반응이 없는 것이므로.

해당 라인 주석처리하고 items!=0을 지운 (왜 만들어놨는지 모르겠다) 코드로 수정하면 정상동작.

Posted by newkie
2013. 6. 28. 15:29

https://github.com/kakao/kakaolink-android


위 링크에서 KakaoLink.java를 받아 자신의 패키지에 넣고


메세지&링크주소 보내기

public void sendKakaoMsg()

{

// check, intent is available.

if (!kakaoLink.isAvailableIntent())

return;


try

{

kakaoLink.openKakaoLink(this, //activity

"http://newkie.tistory.com", //url

"뉴키의 티스토리.", //message

getPackageName(), //appid

getPackageManager().getPackageInfo(getPackageName(), 0).versionName, //appver 

"NewkieApp", //appname

"UTF-8"); //encoding

}

catch (NameNotFoundException e1)

{

e1.printStackTrace();

}

}


이미지(sdcard에 저장된 것) 보내기. imgName은 해당 이미지 파일 경로(Environment.getExternalStorageDirectory().getAbsolutePath()까지 모조리)

void sendKakaoImage(String imgName) {

Uri dataUri = Uri.parse(imgName);

Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("image/*");

intent.putExtra(Intent.EXTRA_STREAM, dataUri);

intent.setPackage("com.kakao.talk");

startActivity(intent);

}


함수호출하면 카톡이 실행되고 보낼 친구를 선택한 후 전송하면 끝.


'안드로이드' 카테고리의 다른 글

안드로이드 네이버 지도 API 분석중  (0) 2013.08.05
WheelView(WheelPicker) Click Event  (0) 2013.07.01
EditText 키보드 imeOptions  (0) 2013.05.22
안드로이드 sqlite  (0) 2013.05.10
AndEngineExtensionSet  (0) 2013.03.26
Posted by newkie
2013. 5. 22. 11:58

에디트텍스트 여러개들 두거나 했을 때 각 키보브려 속성을 정의해서 사용할 수 있는 정보


다음/이전/닫기/전송 등이 있음.


http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions

Posted by newkie
2013. 5. 10. 11:42

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.util.Log;

   

   

public class NotesDbAdapter {

   

    public static final String KEY_KEYWORD = "keyword";//추가를 원하는 개체만큼 추가한다. 이후 ....붙은 곳은 전부 동일하게 추가한다.

...

    public static final String KEY_ROWID = "_id";

   

    private static final String TAG = "NotesDbAdapter";

    private DatabaseHelper mDbHelper;

    private SQLiteDatabase mDb;

   

    /**

     * Database creation sql statement

     */

    private static final String DATABASE_CREATE =

"create table notes (_id integer primary key autoincrement, "

            + "keyword text not null, ......);";

   

    private static final String DATABASE_NAME = "data";

    private static final String DATABASE_TABLE = "notes";

    private static final int DATABASE_VERSION = 1;

   

    private final Context mCtx;

   

    private static class DatabaseHelper extends SQLiteOpenHelper {

   

        DatabaseHelper(Context context) {

            super(context, DATABASE_NAME, null, DATABASE_VERSION);

        }

   

        @Override

        public void onCreate(SQLiteDatabase db) {

   

            db.execSQL(DATABASE_CREATE);

        }

   

        @Override

        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "

                    + newVersion + ", which will destroy all old data");

            db.execSQL("DROP TABLE IF EXISTS notes");

            onCreate(db);

        }

    }

   

    public NotesDbAdapter(Context ctx) {

        this.mCtx = ctx;

    }

   

    public NotesDbAdapter open() throws SQLException {

        mDbHelper = new DatabaseHelper(mCtx);

        mDb = mDbHelper.getWritableDatabase();

        return this;

    }

   

    public void close() {

        mDbHelper.close();

    }

   

    public long createNote(String keyword, ...) {

        ContentValues initialValues = new ContentValues();

        initialValues.put(KEY_KEYWORD, keyword);

....

   

        return mDb.insert(DATABASE_TABLE, null, initialValues);

    }

   

    public boolean deleteNote(long rowId) {

   

        Log.i("Delete called", "value__" + rowId);

        return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;

    }

   

    public Cursor fetchAllNotes() {

   

        return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_KEYWORD,.... }, null, null, null, null, null);

    }

   

    public Cursor fetchNote(long rowId) throws SQLException {

   

        Cursor mCursor =

   

        mDb.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_KEYWORD,....}, KEY_ROWID + "=" + rowId, null, null, null, null,

                null);

        if (mCursor != null) {

            mCursor.moveToFirst();

        }

        return mCursor;

   

    }

   

    public boolean updateNote(long rowId, String keyword) {

        ContentValues args = new ContentValues();

        args.put(KEY_KEYWORD, keyword);

......

   

        return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;

    }

}



각 기능은 함수명으로 알아볼 수 있다.


간단한 사용법


private DbAdapter dbAdapter;


...


dbAdapter = new NotesDbAdapter(this);

dbAdapter.open();


dbAdapter.createNote("keyword", .....);


Cursor result = dbAdapter.fetchAllNotes();

result.moveToFirst();


while(!result.isAfterLast()){

String keyword = result.getString(1);

.....

//여기서 가져온 내용으로 각종 처리(출력,Array에 입력 등등)

result.moveToNext();


}

result.close();

Posted by newkie
2013. 3. 26. 10:10

sudo hg clone [아래주소]


https://code.google.com/p/andenginelivewallpaperextension/

https://code.google.com/p/andenginemodplayerextension/

https://code.google.com/p/andenginemultiplayerextension/

https://code.google.com/p/andenginemultitouchextension/

https://code.google.com/p/andenginephysicsbox2dextension/

https://code.google.com/p/andengineaugmentedrealityextension/

https://code.google.com/p/andenginesvgtextureregionextension/

https://code.google.com/p/andenginetexturepackerextension/


이후 받아진 소스들을 import하고 properties에서 Android 버전체크 및 isLibrary에 AndEngine 지정되어 있는지 확인한다.


이후 res폴더를 생성하여 jar파일을 만든다.



https://github.com/nicolasgramlich 에 접속한다


Eclipse에서 Import - Git - URI 해서 경로에 위 사이트에 있는 AndEngine 및 각종 Extension의 Git주소를 입력한다.


Next를 잘 눌러 주고 Import가 끝나면 properties에 Android 버전설정을 해 주면 끝.



ex)AndEngineExamples를 받아서 properties에 Android로 가서 버전 설정을 해주고 아래 Is Library 리스트에 있는 것들을 전부 받으면 예제 실행 가능. AndEngine은 필수로 깔아야 하고 나머지 extension들은 직접 개발할 때는 선택사항이지만 예제 실행을 위해 일단 다 깔아보면 소스상에 에러 몇 줄이 보인다.


HullAlgorithmExample.java

import org.andengine.entity.primitive.DrawMode;


BoundCameraExample.java

final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager());

face.animate(100);


SplitScreenExample.java

final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion,his.getVertexBufferObjectManager());

face.animate(100);


TextBreakExample.java

this.mText = new Text(50, 40, this.mFont, "", 1000, new TextOptions(AutoWrap.LETTERS, AUTOWRAP_WIDTH, HorizontalAlign.CENTER, Text.LEADING_DEFAULT), vertexBufferObjectManager);


각각 이렇게 수정한다.

Posted by newkie
2013. 1. 14. 14:53

액션스크립트

import flash.external.ExternalInterface;


...


private function FlashAction():void

{

ExternalInterface.call("JavaScriptFunction","I'm ActionScript");

}



자바스크립트

<script type="text/javascript">

 function JavaScriptFunction(msg)

{

document.getElementById("demo").innerHTML=msg;

}

</script>


<p id="demo">I'm JavaScript</p>

<embed src='Main.swf' width='640' height='380' id='main'></embed>


이제 Main.swf 재생 중에 swf에서  FlashAction()이 호출되면 I'm JavaScript 글자가 I'm ActionScript로 변경된다.

Posted by newkie