2015-11-02 36 views
0

我很喜歡Java和Android Studio的noob,我只是找不到繪製矩形的好方法。爲什麼Java變得如此艱難?!我的main_activity中有一個按鈕,用於打開一個新的活動。這一個:如何在Java/Android-Studio中繪製簡單的可重繪矩形?

package com.example.marty.pongtest; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.os.Bundle; 
import android.view.View; 
import android.view.WindowManager; 


public class GamePanelSingle extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_game_panel_single); 

} 

public class drawRectangle extends View{ 

    public drawRectangle(Context context){ 
     super(context); 
    } 

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

     Rect paddle = new Rect(); 
     paddle.set(0, 0, canvas.getWidth()/2, canvas.getHeight()/2); 

     Paint white = new Paint(); 
     white.setColor(Color.WHITE); 
     white.setStyle(Paint.Style.FILL); 

     canvas.drawRect(paddle,white); 
    } 
} 

我的XML代碼:

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="GameSinglePlayer" 
    android:id="@+id/textView" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginLeft="55dp" 
    android:layout_marginStart="55dp" 
    android:layout_marginTop="22dp" 
    android:textColor="#FFFFFF" /> 

爲什麼不這項工作,我怎麼得到它的工作?

THX ..

+0

它是如何不工作?它在做什麼?任何錯誤消息? –

+0

不,它不會給出任何錯誤消息。我只是看不到矩形。它確實顯示我的測試文本。 – MartIQMarty

回答

0

,請複製粘貼您的佈局XML。如果你只想顯示一個矩形,你可以在可繪製的文件夾中定義一個矩形形狀,並在你的佈局中引用它,不需要Java代碼。

+0

它比認爲是一個圖像?我粘貼的XML代碼btw。 Thx回答 – MartIQMarty

+0

哪個小部件要顯示矩形?按鈕或textview? –

+0

不是我猜的小部件。我想製作一個可以移動矩形的小遊戲。會有什麼幫助的是:你如何讓矩形出現在屏幕上? – MartIQMarty

1

易peacy:

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

      canvas.save(); 

      //Draw something 

      canvas.restore(); 
     } 
+0

對不起,我沒有得到粘貼/替換此代碼的位置。我只是粘貼canvas.save/restore();在我的代碼中,但沒有奏效。它雖然沒有給出錯誤。你可以通過在我的代碼中給出一個例子來說明在哪裏放置它?謝謝回答! – MartIQMarty

0

它不是那麼容易理解你的代碼。它沒有很好的編程。首先請寫下類名的首字母大寫。其次,不要像DrawRectangle那樣調用類。它不是一種方法。類是您生成實例的模式。更好的名字將是抽屜/刷子或者像那樣。因爲每個查看代碼並讀取drawRectangle的人都認爲這必須是一種方法。但是: 一旦我實現了一個由線連接的矩形網組成的小活動。這是我如何做到這一點的簡單結構。我儘可能減少了代碼。這很容易地得出了一些野線:

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.util.DisplayMetrics; 
import android.view.MotionEvent; 
import android.view.ScaleGestureDetector; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.Button; 

import java.util.ArrayList; 
import java.util.List; 

public class ZoomView extends View{ 

    private float mPosX = 0; 
    private float mPosY = 0; 

    Context context; 
    Paint red; 

    public ZoomView(Context context) { 
     super(context); 
     this.context = context; 
     init(); 
    } 

    public ZoomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     this.context = context; 
     init(); 
    } 

    public ZoomView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     this.context = context; 
     init(); 
    } 

    public void init(){ 

     red = new Paint(); 
     red.setColor(getResources().getColor(R.color.accent)); 
     red.setAntiAlias(true); 
     red.setStrokeWidth(3); 

    } 

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

     canvas.save(); 
     canvas.translate(mPosX, mPosY); 

     drawLines(canvas); 

     canvas.restore(); 
    } 



    public void drawLines(Canvas canvas){ 
     canvas.drawLine(50, 0, 50, -175, red); 
     canvas.drawLine(50, 25, 50, 200, red); 
     canvas.drawLine(50, 250, 200, 350, red); 
     canvas.drawLine(50, 250, -100, 350, red); 
     canvas.drawLine(-150, 375, -300, 375, red); 
     canvas.drawLine(-100, 400, -100, 550, red); 
     canvas.drawLine(0, -175, -100, -50, red); 
     canvas.drawLine(100, -175, 200, -50, red); 
     canvas.drawLine(-100, -300, 0, -175, red); 
     canvas.drawLine(100, -175, 200, -300, red); 
     canvas.drawLine(50, -200, 50, -375, red); 
     canvas.drawLine(-100, 600, -100, 750, red); 
     canvas.drawLine(-100, 600, -250, 700, red); 
     canvas.drawLine(-100, 600, 50, 700, red); 
     canvas.drawLine(200, 400, 200, 575, red); 
     canvas.drawLine(225, 375, 425, 375, red); 
     canvas.drawLine(-150, -25, -300, -25, red); 
     canvas.drawLine(-100, 0, -250, 100, red); 
     canvas.drawLine(-350, 0, -500, 100, red); 
     canvas.drawLine(-350, -25, -550, -25, red); 
     canvas.drawLine(-350, -50, -500, -150, red); 
     canvas.drawLine(250, -25, 400, -25, red); 
     canvas.drawLine(200, -50, 350, -150, red); 
     canvas.drawLine(200, 0, 350, 100, red); 
     canvas.drawLine(250, -325, 400, -325, red); 
     canvas.drawLine(200, -350, 350, -450, red); 
     canvas.drawLine(500, -325, 650, -325, red); 
     canvas.drawLine(450, -300, 600, -200, red); 
     canvas.drawLine(50, -400, 125, -600, red); 
     canvas.drawLine(50, -400, -25, -600, red); 
     canvas.drawLine(50, -400, -100, -500, red); 
     canvas.drawLine(50, -400, 200, -500, red); 
     canvas.drawLine(-100, -300, -250, -200, red); 
     canvas.drawLine(-150, -325, -300, -325, red); 
     canvas.drawLine(-100, -350, -250, -450, red); 
    } 

} 

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <XXX.XXX.XXX.ZoomView 
     android:id="@+id/zoomView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


</LinearLayout> 
+0

首先感謝提示。然而這段代碼在我的屏幕上沒有畫任何東西。我仍然在前面有onCreate方法,因爲當我不活動會崩潰。這可能是問題所在。另外,當我只是想添加一個矩形到屏幕上,我需要通過所有的代碼?我的最初代碼甚至有什麼問題?記得我是一個noob,我覺得我想念一種方法,可以添加一切到屏幕上? – MartIQMarty

+0

我不知道你到底在做什麼。你的Xml本身看起來不完整。它只包含一個textview。你需要嗎?你想在哪裏畫畫?我只能推薦你:如果你真的是新來的java:從頭開始學習java!如果你不會得到成功的結果。當我查看你的代碼時,我不認爲你是INTO java。 Android基於java,但更復雜。你必須和許多圖書館一起工作,而且還要用XML。 Xml並不難學,但你必須知道它是如何工作的。如果您只想在android中創建遊戲,請在YouTube上觀看教程。 Goodluck – XxGoliathusxX

+0

我發佈的XML確實不完整,因爲StackOverflow不會讓我發佈它。我終於得到了答案:我沒有添加類到我的GameSinglePanel類。很愚蠢。然而,我只是不知道該怎麼做。我現在拿到了,並且得到了所有的幫助 – MartIQMarty

0

如何使用這樣一個TextView需要的地方:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="20dp" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="10dp" 
     android:layout_height="20dp" 
     android:background="@color/light_green"/> 

</LinearLayout>