2011-11-29 12 views
6

Jestem początkującym programistą dla Androida i pochodzę ze świata WP7, więc znalazłem wiele znanych narzędzi, których nie ma. Jedną z moich ulubionych jest http://www.jeff.wilcox.name/2011/10/metrogridhelper/, która jest dla mnie bardzo pomocna, gdy dowiem się, co jest nie tak z układem interfejsu użytkownika lub wyrównaniem podczas debugowania. Zastanawiam się więc, czy istnieje alternatywa w świecie androidów, czy też ktoś może dać mi wskazówki, jak zaimplementować podobne rzeczy w Androidzie.Alternatywą dla Androida do MetroGridHelper

Odpowiedz

0

OK, więc udało nam się to ustalić. ZASTOSOWANIE:

if(Debug.isDebuggerConnected()) 
     grid = new Grid(this); 

Kod źródłowy jest następujący

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PixelFormat; 
import android.graphics.Rect; 
import android.util.AttributeSet; 
import android.view.Display; 
import android.view.View; 
import android.view.WindowManager; 
import android.view.WindowManager.LayoutParams; 

public class Grid { 
    private WindowManager mWindowManager; 
    private GeoView geoView = null; 

    AttributeSet attr = null; 

    public Grid(Context context) { 
     geoView = new GeoView(context, attr); 
     // context.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
     // WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
       LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 
       WindowManager.LayoutParams.TYPE_APPLICATION, 
       WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE 
         | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 
     // | WindowManager.LayoutParams.FLAG_FULLSCREEN 

     mWindowManager.addView(geoView, lp); 

    } 

    protected void finalize() { 
     mWindowManager.removeView(geoView); 
    } 

    public class GeoView extends View implements Runnable { 
     private Paint mPaint = null; 
     private int rectWidth = 25; 
     private int rectHeight = 25; 
     private int rectSpace = 12; 
     private int space = 12; 
     private WindowManager mWindowManager; 
     private int screenWidth = 0; 
     private int screenHeight = 0; 
     private int columnLoopCount = 0; 
     private int rowLoopCount = 0; 

     public GeoView(Context context, AttributeSet attr) { 
      super(context, attr); 
      mWindowManager = (WindowManager) context.getSystemService("window"); 
      Display disp = mWindowManager.getDefaultDisplay(); 
      screenWidth = disp.getWidth(); 
      screenHeight = disp.getHeight(); 
      // Log.d(TAG, "screen width="+disp.getWidth()); 
      // Log.d(TAG, "screen height="+disp.getHeight()); 
      columnLoopCount = (screenWidth - space)/(rectWidth + rectSpace); 
      rowLoopCount = (screenHeight - space)/(rectHeight + rectSpace); 
      columnLoopCount++; 
      rowLoopCount++; 

      mPaint = new Paint(); 

      new Thread(this).start(); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 

      mPaint.setAntiAlias(true); 


      // mPaint.setStyle(Paint.Style.FILL); 
      mPaint.setStyle(Paint.Style.STROKE); 

      for (int i = 0; i < rowLoopCount; i++) { 
       for (int j = 0; j < columnLoopCount; j++) { 
        int newX = j * (rectWidth + rectSpace); 
        int newY = i * (rectWidth + rectSpace); 


        Rect rect1 = new Rect(); 

        rect1.left = space + newX; 
        rect1.top = space + newY; 
        rect1.right = space + rectWidth + newX; 
        rect1.bottom = space + rectHeight + newY; 
        // Log.d(TAG, 
        // "i="+i+",j="+j+",lfet="+rect1.left+" top="+rect1.top+" bottom"+rect1.bottom+" right="+rect1.right); 
        mPaint.setColor(Color.DKGRAY); 

        canvas.drawRect(rect1, mPaint); 

       } 
      } 
     } 

     @Override 
     public void run() { 
      while (!Thread.currentThread().isInterrupted()) { 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException e) { 
        Thread.currentThread().interrupt(); 
       } 

       postInvalidate(); 
      } 
     } 

    } 
} 
Powiązane problemy