簡體   English   中英

如何在Java / Android-Studio中繪制一個簡單的可重繪矩形?

[英]How do you draw a simple redrawable rectangle in Java/Android-Studio?

我在Java和Android Studio中非常菜鳥,而且我找不到繪制矩形的好方法。 為什么Java必須這么難? 我的main_activity中有一個打開新活動的按鈕。 這個:

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" />

為什么不起作用,如何使它起作用?

謝謝..

簡單的和平:

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

            canvas.save();

            //Draw something

            canvas.restore();
        }

請粘貼您的布局xml。 而且,如果只想顯示一個矩形,則只需在drawable文件夾中定義一個矩形形狀,然后在您的布局中引用它即可,而無需Java代碼。

理解您的代碼並不容易。 它沒有很好地編程。 首先,請用大寫字母寫課程名稱。 其次,不要調用諸如DrawRectangle之類的類。 它不是一種方法。 類是您生成的實例的模式。 一個更好的名字是Drawer / Brush或類似的東西。 因為每個查看您的代碼並閱讀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>

如何在需要的地方使用這樣的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM