0

私のアプリでは、その 1 つのメイン アクティビティと、その 1 つのオーバーレイ クラスの googlemaps でのフリーハンド スケッチに googlemaps を使用しています。パスを保存するこのフリーハンド スケッチでは、オーバーレイ クラスで 1 つの配列リストが使用されます。次に、メイン アクティビティで元に戻す機能とやり直し機能を実行するため、メイン アクティビティで配列リストを使用する必要があります。そのためには、オーバーレイ クラスでその配列リストを public static として宣言します。静的を使用すると、私の問題である連続描画が得られます..アプリで静的を使用せずに配列リストを使用する方法....

public class HandDrawOverlay extends Overlay {

   private boolean iseditMode = true;
   private boolean isTouched = false;
   private Paint paint = new Paint();
   private Point screenPt1 = new Point();
   private Point screenPt2 = new Point();
   public static ArrayList<GeoPoint> points = new ArrayList<GeoPoint>();    
   int x, y;
   GeoPoint geoP;
   HandDrawOverlay handDrawOverlay;
   private GoogleMapActivity mview = null;
   private boolean isUp = false;     

   public HandDrawOverlay(GoogleMapActivity mapviewdata){

      paint.setStrokeWidth(4.0f);
      paint.setStyle(Style.STROKE);
      paint.setColor(Color.BLUE);
      mview = mapviewdata;       
   }

   public static ArrayList<GeoPoint>  getBitmap(){
          return points;
   }   

   @Override
   public void draw(Canvas canvas, MapView mapView, boolean shadow) {    
    if (points != null && points.size() > 1) {           
        mapView.getProjection().toPixels(points.get(0), screenPt1);

        for (int i = 1; i < points.size(); i++) {            
            mapView.getProjection().toPixels(points.get(i), screenPt2);
            canvas.drawLine(screenPt1.x, screenPt1.y, screenPt2.x, screenPt2.y, paint);
            screenPt1.set(screenPt2.x, screenPt2.y);                 
        }
     }
  }

   @Override
   public boolean onTouchEvent(MotionEvent e, MapView mapView) {
    if(mview.isEditMode() && (iseditMode)){         

        x = (int) e.getX();
        y = (int) e.getY();           
        geoP = mapView.getProjection().fromPixels(x, y);    
        Log.i("", "geoP" +geoP);

        switch (e.getAction()) {
        case MotionEvent.ACTION_DOWN:                            
            isTouched = true;        
            points.add(geoP);                               
            break;              

        case MotionEvent.ACTION_MOVE:            
            if (isTouched = true)
                points.add(geoP);               
            break;

        case MotionEvent.ACTION_UP:          
            if (isTouched = true)
                points.add(geoP);                    
            isUp = true;
            handDrawOverlay = new HandDrawOverlay(mview);
            mapView.getOverlays().add(handDrawOverlay);
            break;
        }           
        mapView.postInvalidate();    
        return true;            
      }      
       return false;
   }     
}
4

1 に答える 1

0

そのために、これを使用できます。

public class Hiroshima {

    private static Hiroshima hr = new Hiroshima();


    public ArrayList<String> mImages = new ArrayList<String>();


      private Hiroshima(){}

      public static Hiroshima getInstance(){

          return hr;
      }

}

これで、この ArrayList をどこからでも使用できます。同じインスタンスが得られます。

アクティビティに以下のように書き留めます。

Hiroshima hx = Hiroshima.getInstance();
于 2012-11-02T06:16:29.380 に答える