2010-03-29 23 views
6

HI all,Mới đối với Android - Vẽ chế độ xem tại thời gian chạy

Tôi chỉ mới bắt đầu phát triển cho Android. Tôi đang tìm cách cổng một trong các ứng dụng iPhone của mình, nhưng tôi không biết làm thế nào để vẽ một khung nhìn trong thời gian chạy (một khung nhìn không được khai báo trong XML). Về cơ bản, tôi muốn vẽ một hình chữ nhật đơn giản, nhưng sau đó có thể thao tác khung của nó sau khi được vẽ.

Xin lỗi nếu đây là một câu hỏi thực sự, thực sự đơn giản, nhưng tôi dường như không thể tìm thấy một số tương đương với SDK iPhone tại đây.

Cảm ơn trước!

Trả lời

7

Có vẻ như bạn muốn thử nghiệm với đồ họa 2D - cho điều đó, bạn nên sử dụng Canvas. Bạn có thể kiểm soát bản vẽ của Canvas thông qua phương pháp invalidate(), cho Android biết vẽ lại toàn bộ điều kích hoạt phương thức onDraw() được tùy chỉnh của bạn. Bạn đề cập đến không muốn sử dụng tệp XML, nhưng đó là cách đơn giản nhất để đưa vào Canvas - bạn không cần phải xác định nội dung của nó trong tệp XML, nhưng chỉ cần nói tệp sơ đồ bố trí ở đó. Một cách mạnh mẽ nhưng đơn giản để đặt Canvas trong ứng dụng của bạn là tùy chỉnh Chế độ xem. Ví dụ, bao gồm trong tệp XML của bạn một phần tử <your.package.CustomView android:.../>. Sau đó, khai báo lớp CustomView extends View. Bất kỳ loại bản vẽ nào bạn muốn làm, đặt vào phương thức onDraw().

Ví dụ: để vẽ hình chữ nhật, hãy làm như thế này.

//First you define a colour for the outline of your rectangle 
rectanglePaint = new Paint(); 
rectanglePaint.setARGB(255, 255, 0, 0); 
rectanglePaint.setStrokeWidth(2); 
rectanglePaint.setStyle(Style.STROKE); 

//Then create yourself a Rectangle 
Rect rectangle = new Rect(left, top, right, bottom) //in pixels 

//And here's a sample onDraw() 
@Override 
public void onDraw(Canvas canvas){ 
    rectangle.offset(2, 2); 
    canvas.drawRect(rectangle, rectanglePaint); 
} 

Mỗi lần invalidate() được gọi từ chương trình của bạn, chế độ xem sẽ được vẽ lại và hình chữ nhật di chuyển 2px xuống và sang phải. Lưu ý: việc vẽ lại chỉ xảy ra với chuỗi chính là 'đang chờ'. Nói cách khác, nếu bạn có một vòng lặp gọi là vô hiệu hóa nhiều lần, View sẽ không thực sự được rút ra cho đến khi vòng lặp kết thúc. Bạn có thể giải quyết vấn đề này, nhưng điều đó làm tăng thêm sự phức tạp. Để biết ví dụ về cách thực hiện, hãy xem trò chơi ví dụ về LunarLander từ Google - đó là một trò chơi đơn giản thể hiện Chế độ xem tùy chỉnh, 2 luồng và cách triển khai hoạt ảnh liên tục.

+0

Hoạt động đẹp, cảm ơn bạn! –

Các vấn đề liên quan