2010-08-25 28 views
14

Làm cách nào để bạn tạo đường viền được vẽ nét hoặc chấm chấm động của một hình dạng tùy ý trong Android? Trong XML (ưa thích) hoặc theo lập trình.Đường viền được tô hình động trong Android

Xem hình bên dưới để biết ví dụ.

alt text

+0

Bạn có muốn sử dụng thiết bị di động không? Bên cạnh đó là hấp dẫn như thẻ BLINK, nó sẽ ăn pin. Nếu đây là về quảng cáo, đó không phải là cách để có được khách hàng hài lòng. –

+0

Đó là mong muốn cho trường hợp sử dụng của tôi. Ứng dụng này dành cho ứng dụng đồ họa và đường viền hoạt ảnh đứt quãng là biểu tượng phổ quát cho mặt nạ. Ngoài ra, tôi không nghĩ rằng điều này sẽ ăn nhiều năng lượng pin hơn nói, một nền tảng sống. – hpique

+0

OK, tôi nghi ngờ mục đích quảng cáo bất chính. Đó là một mục đích hợp lý. –

Trả lời

18

Bạn đã xem bản demo API PathEffects chưa? http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PathEffects.html

Nó tạo chính xác một dòng động và bạn chỉ có thể điều chỉnh đường dẫn đến cạnh của chế độ xem để tạo đường viền. Ví dụ:

Xác định một con đường bằng cách xem thông số/hình dạng tùy ý của bạn:

Path path = new Path(); 
path.addRect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom(), Path.Direction.CW); 

Sau đó tạo một PathEffect tiêu tan với:

PathEffect pe = new DashPathEffect(new float[] {10, 5, 5, 5}, phase); 

Sau đó thiết lập các sư nó với một đối tượng Sơn và vẽ :

mPaint.setPathEffect(pe); 
canvas.drawPath(path, mPaint); 

CHỈNH SỬA: Hiệu ứng động đến từ việc thay đổi liên tục pha và vẽ lại. Trong bản demo API, nó gọi invalidate() trong phương thức onDraw() (kích hoạt onDraw() ...)

+0

Cảm ơn antonyt!Điều này thật đúng với gì mà tôi đã tìm kiếm. Đáng tiếc nó không thể được định nghĩa trong xml. – hpique

+1

Một vấn đề với điều này là nó phân bổ rất nhiều đối tượng sẽ kích hoạt bộ sưu tập rác và có thể khiến hoạt ảnh của bạn bị gián đoạn. Bạn có thể tránh một phần của vấn đề bằng cách phân bổ float [] như một thành viên lớp ở đâu đó. Bạn không chắc chắn làm thế nào để tránh việc phân bổ DashPathEffect mỗi khi giai đoạn thay đổi, mặc dù tất nhiên bạn có thể xử lý các hình ảnh động mình bằng cách dịch các dòng. – mwd

+0

Bạn có thể tạo một mảng các DashPathEffects (kích thước bằng với số cao nhất trong mảng float, 10 trong trường hợp này), và tái sử dụng các hiệu ứng này. Ít nhất đây là những gì tôi đang làm, nhưng đối với hiệu ứng 'PathDashPathEffect'. –

0

XML ... Tôi đoán là không thể. Nhưng bạn có thể sử dụng chế độ xem tùy chỉnh hoặc SurfaceView và xử lý bản vẽ của chính mình. Hãy vui vẻ với điều đó :)

+0

Bất kỳ con trỏ nào để triển khai nó với chế độ xem tùy chỉnh hoặc SurfaceView? – hpique

+0

bạn có thể vẽ các đường trên mỗi canvas và đối tượng Paint đã sử dụng có thể có các kiểu khác nhau. Nếu bạn thay đổi giữa đường màu trắng với một đường đứt nét màu đen ở trên và đường màu đen với đường đứt nét màu trắng ở trên trên mỗi khung hình, bạn sẽ nhận được hiệu ứng mong muốn. – WarrenFaith

0

Bạn có thể sử dụng một số hình thức của hai hình ảnh 9patch làm khung nền xung quanh tệp hình ảnh bạn muốn trình bày, một trong hai bố cục. Các hình ảnh sẽ khác nhau về vị trí của các yếu tố đứt quãng. Trao đổi quan điểm nhanh chóng (có thể cần một sự chậm trễ) và bạn có thể nhận được hiệu ứng mà bạn muốn. Không thực sự biết mức độ hiệu quả của điều đó khi có thể cho phép người dùng tiếp tục sử dụng ứng dụng và nhai pin ...

+0

Hai hình ảnh vá 9 trong hình động có thể vẽ được. Điều đó có thể hoạt động và có thể thực hiện được thông qua XML. Sẽ thử nó. – hpique

+0

Không. Không hoạt động. 9 hình ảnh vá không lặp lại các mẫu, chúng chỉ kéo dài một phần của hình ảnh. – hpique

+0

Xin lỗi, những gì tôi nhận được là bạn tạo hai hình ảnh ở định dạng 9patch. Bạn sẽ phải tự mình tạo ra các mẫu nhưng theo cách mà nếu bạn nhanh chóng chuyển đổi giữa chúng, nó sẽ tạo ra ảo tưởng rằng các dấu gạch ngang đang di chuyển. – Adriaan

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