Мигание

Ответить
0800009
Сообщения: 36
Зарегистрирован: 08 мар 2014, 20:40

Мигание

Сообщение 0800009 » 28 янв 2015, 21:48

Как реализовать мигание или чередование маркеров на карте.
Использую библиотеку осмдроид.
Я сделал так запускаю таймер таск и через хендлер отправляю сообщение
и присваиваиваю SS=1 потом через секунду SS=0
в методе onDraw в зависимости от значения SS
присваиваю setMarker(panic) или другое Drawable и перерисовываю invalidate()
как еще можно сделать? если это не правильно
так как ощущение что приложение грузит сильно смартфон.

Код: Выделить всё

package org.osmdroid;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.osmdroid.api.IMapView;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.MapView.Projection;
import org.osmdroid.views.overlay.IOverlayMenuProvider;
import org.osmdroid.views.overlay.ItemizedOverlay;
import org.osmdroid.views.overlay.Overlay;
import org.osmdroid.views.overlay.OverlayItem;
import org.osmdroid.views.overlay.OverlayItem.HotspotPlace;
import org.osmdroid.views.safecanvas.ISafeCanvas;
import org.osmdroid.views.safecanvas.SafePaint;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class PostOverlay extends ItemizedOverlay<SampleOverlayItem>  implements
ItemizedOverlay.OnFocusChangeListener , 
IOverlayMenuProvider {
	 Handler h =   new Handler() {
	        public void handleMessage(android.os.Message msg) {
	            switch (msg.what) {
	            case STATUS_NONE:
	            	SS=1;
	            	 invalidate();
	              break;
	            case STATUS_CONNECTING:
	            	 SS=0;
	            	 invalidate();
	              break;
	            }
	          };
	        };
	        public Timer mTimer;
			public MyTimerTask mMyTimerTask;
			 final int STATUS_NONE = 0; // нет подключения
			  final int STATUS_CONNECTING = 1; // подключаемся
			 
	public static int SS=1;
	
	private Location mLocation;
	private String Device;
	private String GPSPoint_lat;
	private String S;
	XmlPullParser xpp; protected final Bitmap mPersonBitmap;
	 private boolean postenable = false;
	 private boolean mFocusChanged = false;
     private View mPopupView = null;
     final String LOG_TAG = "PostOverlay";
     public static final int POST_OVERLAY = getSafeMenuId();
	private static final String Device1 = null;
	private static final String GPSPoint_lat1 = null;
	PostDataHelper P;
         MapView         mapView;
     ArrayList <SampleOverlayItem>items = new ArrayList<SampleOverlayItem>();

	private int size=0;
	 private boolean mOptionsMenuEnabled = true;
	 Paint paint;
	private GeoPoint gPt1=new GeoPoint(54.7820, 58.9660);
	private Point mTouchScreenPoint =new Point();Drawable panic;Drawable markers;
	//Projection pj = mapView.getProjection();
	
	 
	
     public PostOverlay(Drawable panic ,Drawable pDefaultMarker, Context pContext,MapView mapView) {
             super(pDefaultMarker, new DefaultResourceProxyImpl(pContext));
             Rect screenRect = mapView.getProjection().getScreenRect();
             mTimer = new Timer();
     		mMyTimerTask = new MyTimerTask();
     			mTimer.schedule(mMyTimerTask, 20,2000);
             this.mapView=mapView;this.panic= panic;
            this.markers=pDefaultMarker;
            this.mPersonBitmap = this.mResourceProxy.getBitmap(ResourceProxy.bitmap.person);
      //      Drawable icon = this.getResources().getDrawable(R.drawable.marker_default);
             Log.d(LOG_TAG, "конструктор " +panic);
             paint = new Paint(Paint.ANTI_ALIAS_FLAG);
             setOnFocusChangeListener(this);
     
    	    	          
     }
           

	

         @Override
     protected SampleOverlayItem createItem(int i) {
        	 
    	 Log.d(LOG_TAG, "createItem   " +   i);
             final  SampleOverlayItem OverlayItem = items.get(i);
             return OverlayItem;
     }
      
    
     
     protected void onDrawItem(Canvas canvas, SampleOverlayItem item, Point curScreenCoords)
        {
    	  Log.d(LOG_TAG, "onDrawItem 22 ");
   
 
///здесь условие на смену рисунка
        String s=item.mDescription.trim();
             item.setMarker(markers);
      if( s.equals("63553")){
    	  Log.d(LOG_TAG, "onDrawItem 63553 ");
    	  if (SS==1){
    item.setMarker(panic);}
    	  else { item.setMarker( markers);
    	        }}
      super.onDrawItem(canvas, item, curScreenCoords);
 }
          
       
        }
     @Override
     protected void drawSafe(ISafeCanvas canvas, MapView mapView, boolean shadow) {
    	 super.drawSafe(canvas, mapView, shadow);
    	
    	 if (shadow) {
    		     return;
    		    }
    	 int size = this.items.size() - 1;
    	     
   
    	  
    	    for (int i = size; i >= 0; i--) 
    	      
    	    {
    	    	      	    	  Log.d(LOG_TAG, "onDrawItem i"+i);
    	    	  SampleOverlayItem item = items.get(i);
    	       pj.toMapPixels(item.mGeoPoint, this.mTouchScreenPoint);
    	      
    	 
    	       onDrawItem(canvas.getSafeCanvas(), item, this.mTouchScreenPoint);
    	      }
    	  
    	
    	  * super.drawSafe(canvas, mapView, shadow);
    	 }
     }
      
	
	protected View getPopupView(Context context, SampleOverlayItem item) {
    	 Log.d(LOG_TAG, "getPopupView ");
             TextView tv = new TextView(context);
             tv.setText(item.getTitle());
             tv.setBackgroundColor(Color.WHITE);
             return tv;
     }

    // @Override
   //  protected void onDrawItem(ISafeCanvas Canvas, SampleOverlayItem item, Point curScreenCoords) {
    //	 Log.d(LOG_TAG, "onDrawItem "); 
    //	 Canvas canvas = null;
	//			super.onDrawItem(canvas, item, curScreenCoords);
    // }

 /*    @Override
	protected void onDrawItem(Canvas canvas, SampleOverlayItem item,
			Point curScreenCoords) {
    	 Log.d(LOG_TAG, "onDrawItem  2222222");
    	  Drawable marker = getDefaultMarker(2) ;
    	// Overlay.drawAt(canvas, marker, curScreenCoords.x, curScreenCoords.y, false);
    	 marker.draw(canvas);
    	//  canvas.drawCircle(100, 200, 50, p);
    	  Log.d(LOG_TAG, "point 22 " );
    	 
    	     
		// TODO Auto-generated method stub
	//super.onDrawItem(canvas, item, curScreenCoords);
	}*/


	@Override
     public int size() {
    	// size=size++;
             return items.size();
     }

   	    public boolean enable() {
	    	postenable= true;
			return false;
	    }
			 public boolean disable() {
				 postenable=false;
					return false;
				
		}
	    public boolean isMyLocationEnabled() {
	    	
			return postenable;
		}
	@Override
	public boolean onPrepareOptionsMenu(final Menu pMenu, final int pMenuIdOffset,
    		final MapView pMapView) {
		pMenu.findItem(POST_OVERLAY + pMenuIdOffset).setChecked(this.isMyLocationEnabled());
		// TODO Auto-generated method stub
		Log.d(LOG_TAG, "onPrepareOptionsMenu ");
		return true;
	}
	



	

	 class MyTimerTask extends TimerTask{
		 private boolean running = true;
		 
		
		 
		 public void setRunning(boolean running) {
		        this.running = running;
		      }
		 
	
			@Override
		public boolean cancel() {
			// TODO Auto-generated method stub
			return super.cancel();
		}

			@Override
			public void run() {
				 Log.d(LOG_TAG, " TAsK " );
				try{ h.sendEmptyMessage(STATUS_CONNECTING);
		          TimeUnit.SECONDS.sleep(1);

		          // установлено
		          h.sendEmptyMessage(STATUS_NONE);

		          // выполняется какая-то работа
		          TimeUnit.SECONDS.sleep(0);

				
				
				// TODO Auto-generated method stub
			
				} catch (InterruptedException e) {
		          e.printStackTrace();
			}
			}
	 }



	
	


}



0800009
Сообщения: 36
Зарегистрирован: 08 мар 2014, 20:40

Re: Мигание

Сообщение 0800009 » 29 янв 2015, 13:28

одно из двух либо вопросы слишком тупые либо наоборот ))

Ответить