Нужна помощь с рисованием на заказное представление - PullRequest
0 голосов
/ 14 марта 2011

Мне нужен твой опыт. Проблема: мне нужно уметь рисовать вещи (прямоугольник, кружок и т. Д.) В одной части FlipperView .... Мой main.xml имеет основной linearLayout. В этом LinearLayout у меня есть ViewFlipper с 2 линейными разметками в нем. Первый линейный макет имеет кнопки сомов, поля ввода и т. Д., Второй должен иметь особый вид, в котором я могу нарисовать то, что выбрал в первой части. Итак, я создал новый вид, который расширяет класс View, чтобы я мог играть с методом ondraw. Но я не могу заставить его работать. Это то, что я до сих пор ... Main.xml

</p> <pre><code><LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/layout_main" xmlns:android="http://schemas.android.com/apk/res/android"> <ViewFlipper android:id="@+id/details" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="match_parent">

// КНОПКИ ТЕКСТИЛЬНЫХ И Т.Д.

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

// экземпляр моего нового ViewClass

<Vierbergen.Tim.ViewClass
android:id="@+id/draw" android:layout_width="match_parent"
android:layout_height="match_parent"/>
    </LinearLayout>
</ViewFlipper>
</LinearLayout>

VIEWCLASS.java </p> <pre><code>public class ViewClass extends View { Paint paint = new Paint(); public DrawView(Context context) { super(context); paint.setColor(Color.WHITE); } @Override public void onDraw(Canvas canvas) { //depending on some params.... draw this, draw that... }

}

а потом моя основная деятельность DRAWER.JAVA

</p> <pre><code>public class SmsDraw extends Activity implements OnTouchListener{ ViewClass vClass; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); vClass = (ViewClass) findViewById(R.id.draw); }

// с функцией рисования где-то с кнопкой private void start () { // где взять холст? Холст с = новый холст (); blablalba vClass.onDraw (с); }

Так что мне нужно иметь возможность рисовать вещь VIEWCLASS с id = draw в моем main.xml ... Как я могу это сделать ? Пожалуйста, помогите мне с объяснением и решением, а не просто решением: -)

Спасибо VeeTee

Ответы [ 3 ]

1 голос
/ 14 марта 2011

Ваш метод onDraw будет вызываться платформой, если ваш View присоединен к иерархии представления.Вам не нужно называть его самим.

Если вы не уверены в своем коде onDraw, попробуйте использовать код из примера, например DrawPoints в демонстрационных версиях API.

0 голосов
/ 16 марта 2011

Кажется, что проблема, с которой он не работал в первый раз, была ...

, когда основное действие хочет установитьContentView (...) ... происходит сбой .... Но когда я оставляю это вне xml и создаю это во время выполнения как это

viewClass = new ViewClass (this);

    layke = (LinearLayout) findViewById(R.id.layoutDraw);//wich is the second part of the flipperview
    layke.addView(viewClass); // to at it to the right layout

это работает ....

0 голосов
/ 14 марта 2011

Вы сами не зовете Драву, как сказал Мэтью.Вот очень простое дополнение к вашему ViewClass, которое позволит вам рисовать прямоугольники или круги.Он не был проверен, поэтому действуйте осторожно.



import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class DrawView extends View {
    private boolean drawRect;
    private boolean drawCircle;
    private float rect_w;
    private float rect_h;
    private int rect_color;
    private float circle_radius;
    private int circle_color;
    Paint paint;

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

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();
    }

    public DrawView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        paint = new Paint();
    }

    public void drawRect(float w, float h, int color) {

        // define these variables privately at the top of the class
        this.drawRect = true;
        this.drawCircle = false;
        this.rect_w = w;
        this.rect_h = h;
        this.rect_color = color;
    }

    public void drawCircle(float radius, int color) {

        // define these variables privately at the top of the class
        this.drawRect = false;
        this.drawCircle = true;
        this.circle_radius = radius;
        this.circle_color = color;
    }

    @Override
    public void onDraw(Canvas canvas) {

        if (drawRect) {
            paint.setColor(this.rect_color);
            canvas.drawRect(0, 0, rect_w, rect_h, paint);
        }
        if (drawCircle) {
            paint.setColor(this.circle_color);
            canvas.drawCircle(0, 0, circle_radius, paint);
        }
    }
}

Затем, по вашему мнению, класс, назовите его так:


vClass = (DrawView) findViewById(R.id.draw);
vClass.drawRect(3,4,0x334434);
...