2012-07-05 1 views
0

캔버스를 사용하여 수학 방정식 및 텍스트를 그리는 데 문제가 있으며 결과의 데이터를 입력하기 위해 화면 하단에 텍스트 상자를 사용하고 있습니다. 현재 설정에서 버튼과 텍스트 상자 또는 방정식과 변수 이름을 가질 수 있습니다. 다음은 자바 클래스Android에서 다중 컨텐트보기 (XML 및 캔버스) 사용

package com.soraingraven.suprRef; 

import java.io.IOException; 
import java.io.InputStream; 

import android.app.Activity; 
import android.content.Context; 
import android.content.res.AssetManager; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 

public class PerfectGasLaw extends Activity { 
    class RenderView extends View { 
     //For the Text 
     Paint paint; 
     Typeface font; 

     //For the pics 
     Bitmap PGL; 

     public RenderView(Context context) { 
      super(context); 
      paint = new Paint(); 

      //Attempt to load the bitmaps 
      try {    
       AssetManager assetManager = context.getAssets(); 
       InputStream inputStream = assetManager.open("PerfGasLaw.png"); 
       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inPreferredConfig = Bitmap.Config.ARGB_4444; 
       PGL = BitmapFactory.decodeStream(inputStream, null, options); 
       inputStream.close(); 
       Log.d("BitmapText", "bobargb8888.png format: " + PGL.getConfig()); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       //we should really close our input streams here. 
      } 
     } 

     //Drawing text and pics 
     protected void onDraw(Canvas canvas) { 
      paint.setColor(Color.BLUE); 
      paint.setTypeface(font); 
      paint.setTextSize(32); 
      paint.setTextAlign(Paint.Align.LEFT); 
      canvas.drawText("P = Pressure in Atmospheres", 25, 350, paint); 
      canvas.drawText("V = Volume in Liters", 25, 400, paint); 
      canvas.drawText("n = Number of moles", 25, 450, paint); 
      canvas.drawText("R = Gas Constant", 25, 500, paint); 
      canvas.drawText(" - (0.0821 Liter-Atmospheres/K/mole)", 50, 550, paint); 
      canvas.drawText("T = Temperature in K", 25, 600, paint); 
      canvas.drawText("If Constant Pressure - V1/V2 = T1/T2", 25, 650, paint); 
      canvas.drawText("If Constant Temperature - P1/P2 = V2/V1", 25, 700, paint); 
      canvas.drawText("If Constant Volume - P1/P2 = T1/T2", 25, 750, paint); 

      canvas.drawBitmap(PGL, 25, 25, null); 
      invalidate(); 
     } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     setContentView(new RenderView(this)); 
    } 
} 

그리고

<?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="horizontal" > 


    <EditText 
     android:id="@+id/edit_message" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:layout_weight="1" 
     android:ems="10" 
     android:hint="@string/edit_message" > 

     <requestFocus /> 
    </EditText> 


    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom" 
     android:text="@string/button_send" /> 

</LinearLayout> 

이 일에 저를 도와주십시오 XML에서 내 코드입니다. 또한 누군가가이 같은 텍스트 필드에서 입력을 잡는 방법을 말해 줄 수 있다면 도움이 될 것입니다. 또한 가능한 최소한의 XML을 사용하여이 작업을 시도하고 있습니다.

답변

1

EquationViewView에서 하위 클래스로 만들면보기에 onDraw 메서드()가 포함될 수 있습니다.

그리고 그 EditText과 함께

<mypackage.equation.EquationView ... 
    android:layout_width=... 
    android:layout_height=... 
/> 

Button

+0

같은 당신이 당신의 뷰를 배치 할 것 XML, 내 코드에서 RenderView 다를 수 EquationView 것? 이것은 차이가 나는 경우 목록에서 선택한 별도의 활동입니다. – user1183668

+0

'RenderView는 View를 확장합니다.'는 Activity의 xml 파일에 있습니다. 액티비티 내에서 findViewById로 렌더 뷰를 찾을 수 있으므로 필요한 경우 뷰에 액세스 할 수 있습니다. –

+0

내 XML 파일에 패키지를 넣을 때이 오류가 발생합니다. 설명 \t 자원 \t 경로 \t 위치 요소 유형 "패키지"와 관련된 \t 유형 이름 "com.soraingraven.suprRef.RenderView을"속성은 '='문자가 와야합니다. \t main.xml에 \t/슈퍼 참조가/고해상도/레이아웃 \t 라인 (109) \t 안드로이드 XML 형식의 문제가 나는이 <패키지 com.soraingraven.suprRef.RenderView 안드로이드처럼 놓여있다 : ID = "@ + ID/그리기 " \t \t \t 로이드 : layout_width ="wrap_content " \t \t \t 로이드 : layout_height ="wrap_content "/은> 그 차이를 만드는 것은 상대 레이아웃 내에 있을지 – user1183668