2014-02-12 2 views
0

캔버스부터 시작하니 도움이 필요합니다. "룸"에서 실시간 좌표를 나타내고 싶습니다. 처음에 나는 surfaceholder를 만들 때 "room"을 그리고 잘 작동합니다. 내 생각은이 방에서 다른 점을 나타냅니다. 캔버스 및 홀더 업데이트

내 활동 :

package com.example.grafica; 

import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.res.Configuration; 
import android.graphics.Point; 
import android.os.Build; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Display; 
import android.view.KeyEvent; 
import android.view.LayoutInflater; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.FrameLayout; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TableLayout; 
import android.widget.TextView; 

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
public class MainActivity extends Activity { 

    private LayoutInflater myInflater = null; 
    private TextView tx1, tx2, tx3, tx4, tx5, tx6, tx7; 
    float ancho = (float) 5.20; 
    float largo = (float) 3.50; 
    private TableLayout table, table2; 
    private LinearLayout.LayoutParams params, params2; 
    private MySurface surface; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     Log.i("telo", "oncreate"); 
     super.onCreate(savedInstanceState); 

     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
      setContentView(R.layout.activity_main); 
      myInflater = LayoutInflater.from(this); 
      View overView = myInflater.inflate(R.layout.segundacapa, null); 
      this.addContentView(overView, new LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

     } 

     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      setContentView(R.layout.activity_main); 
      myInflater = LayoutInflater.from(this); 
      View overView = myInflater.inflate(R.layout.segundacapaland, null); 
      this.addContentView(overView, new LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

     } 

     surface =(MySurface)findViewById(R.id.surface); 
     tx1 = (TextView) findViewById(R.id.textView2); 
     tx2 = (TextView) findViewById(R.id.textView3); 
     tx3 = (TextView) findViewById(R.id.textView4); 
     tx4 = (TextView) findViewById(R.id.textView5); 
     tx5 = (TextView) findViewById(R.id.textView7); 
     tx6 = (TextView) findViewById(R.id.textView8); 
     tx7 = (TextView) findViewById(R.id.textView9); 

     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width = size.x; 
     int height = size.y; 

     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 

      table = (TableLayout) findViewById(R.id.table); 
      params = (LinearLayout.LayoutParams) table.getLayoutParams(); 

      float ratio = ancho/largo; 
      float aux = width/ratio; 

      params.topMargin = (int) aux + 20; 

      surface.xini = 20; 
      surface.yini = 20; 
      surface.xend = width - 20; 
      surface.yend = aux; 

     } 

     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 

      table2 = (TableLayout) findViewById(R.id.table2); 
      params2 = (LinearLayout.LayoutParams) table2.getLayoutParams(); 

      float ratio = largo/ancho; 
      float aux = width/ratio; 

      params2.leftMargin = (int) (width * ratio) + 20; 

      surface.xini = 20; 
      surface.yini = 20; 
      surface.xend = width * ratio; 
      surface.yend = height - 220; 

     } 

     surface.ini(); 
     surface.update(); 

    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent evento) { 

     return super.onKeyDown(keyCode, evento); 
    } 
} 

그리고이 내 표면 클래스 : conclussion에서

package com.example.grafica; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Paint.Style; 
import android.graphics.RectF; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class MySurface extends SurfaceView implements SurfaceHolder.Callback { 

    private Paint pincel = new Paint(); 
    private Canvas canvas; 
    public float xini = 0; 
    public float yini = 0; 
    public float xend = 0; 
    public float yend = 0; 
    public float coordinatex =(float) 2.50; 
    public float coordinatety=(float) 1.75; 
    private SurfaceHolder holder; 

    public MySurface(Context context, AttributeSet attr) { 
     super(context,attr); 


    } 

    public void ini(){ 
     getHolder().addCallback(this); 
    } 

    public void update(){ 

     holder.lockCanvas(); 
     pincel.setColor(Color.BLUE); 
     pincel.setStrokeWidth(25); 
     canvas.drawPoint(100, 100, pincel); 
     holder.unlockCanvasAndPost(canvas); 

    } 

    @Override 
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void surfaceCreated(SurfaceHolder arg0) { 

     holder = arg0; 
     canvas = arg0.lockCanvas(); 
     canvas.drawColor(Color.WHITE); 
     pincel.setColor(Color.BLACK); 
     pincel.setStrokeWidth(8); 
     pincel.setStyle(Style.STROKE); 
     RectF rect = new RectF(); 

     rect.set(xini, yini, xend, yend); 
     canvas.drawRect(rect, pincel); 

     pincel.setColor(Color.RED); 
     pincel.setStrokeWidth(25); 
     canvas.drawPoint(xini, yend, pincel); 

     pincel.setColor(Color.BLUE); 
     pincel.setStrokeWidth(25); 
     canvas.drawPoint(xend, yend, pincel); 

     pincel.setColor(Color.GREEN); 
     pincel.setStrokeWidth(25); 
     canvas.drawPoint(xini, yini, pincel); 

     pincel.setColor(Color.YELLOW); 
     pincel.setStrokeWidth(25); 
     canvas.drawPoint(xend, yini, pincel); 

     arg0.unlockCanvasAndPost(canvas); 


    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder arg0) { 
     Log.e("surfaceDestroyed ", "Hilo detenido "); 

    } 

    @Override 
    public void onDraw(Canvas canvas) { 


    } 

} 

, surface.ini();와 내가 SurfaceCreated에 전화 방을 그리고 내 생각은 surface.upddate();을 가진 그 이 방에있는 지점을 나타냅니다. 같은 캔버스와 홀더를 재사용 할 수 있습니까? 방법? invalidate() 함수에 대해 읽은 적이 있는데 도움이 될만한가요? 어떻게이 기능을 사용합니까? 감사

당신은보기 다시 그릴 효과를 관리하는 스레드가 필요합니다

답변