2010-12-31 64 views
12

Tôi có tình huống mà tôi muốn thay đổi bố cục hoạt động sau 3 giây. Tôi có thể làm điều đó không? Ví dụ ứng dụng bắt đầu với splashscreen sẽ chạy trong 3 giây sau đó tự động chuyển bố cục sang bố cục màn hình đầu tiên của ứng dụng. Điều này sẽ xảy ra trong cùng một hoạt động, bất kỳ ý tưởng nào?Bố cục thay đổi Android động

Cảm ơn

Trả lời

14

Tôi đã thực hiện việc này chỉ bằng một bố cục xml. Tôi chỉ cần đặt thêm một RelativeLayout trong đó đại diện cho màn hình giới thiệu của tôi sau đó tôi sử dụng một fadeOut Animation trên nó và sau đó gọi .setVisibility (View.GONE).

Đây là một phần của tập tin bố trí main.xml tôi

<RelativeLayout 
     android:id="@+id/introLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
     android:background="#FFFFFF" 
    > 

     <ImageView 
     android:id="@+id/logoImg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:src="@drawable/logo"> 
     </ImageView> 
    </RelativeLayout> 

Sau đó bên trong hoạt động của tôi, tôi có điều này:

introLayout = (RelativeLayout) findViewById(R.id.introLayout); 
Animation fadeOutAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fadeout); 
introLayout.startAnimation(fadeOutAnim); 
introLayout.setVisibility(View.GONE); 

Bạn có thể làm cho hoạt động này sau 3 giây bằng cách đặt startAnimation() , và setVisibility bên trong của một runnable và sử dụng postDelayed() như markus đã đề cập. Hãy xem xét làm một số công việc trong khi bố trí giới thiệu này là trên màn hình mặc dù, do đó, nó không chỉ là một sự chậm trễ 3 giây cho người dùng. Có lẽ kiểm tra xem phiên bản đang chạy của ứng dụng có phải là phiên bản hiện tại hay không.

CHỈNH SỬA: Bạn cần phải thêm tệp fadout.xml vào /res/anim/ (tạo thư mục hoạt ảnh nếu nó không tồn tại). Đây là một ví dụ.

fadeout.xml

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

<alpha xmlns:android="http://schemas.android.com/apk/res/android" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="700" 
     android:fillAfter="true"/> 
+0

Đây là giải pháp thông minh! – Sana

+0

tại sao '.anim.' trong' R.anim.' lại xuất hiện? Tôi nhận được một 'hoạt hình không thể được giải quyết hoặc không phải là một lĩnh vực' – Alex

+1

@ w0rldart bạn cần phải thêm fadeout.xml vào thư mục '/ res/anim /', xem chỉnh sửa của tôi. – FoamyGuy

2

có lẽ bạn có thể sử dụng một postDelayed() - gọi để thực hiện một Runnable đó sẽ được tải một file xml mới bằng cách gọi setContentView (R.xml.anotherxml).

3

Chỉ cần sử dụng ViewSwitcher, sử dụng trình chuyển đổi này có thể chuyển đổi giữa bất kỳ số lượng bố trí nào trong ứng dụng mà không phải thực hiện bất kỳ setContentView nào.

1

này khiến tôi để thêm vào bài adnorid, đó ViewSwitcher bản thân chỉ có thể chuyển đổi giữa 2 bố trí/views. Điều này đơn giản chỉ vì nó được mã hóa cứng thành chỉ 2 bố cục/lượt xem mà không có ý nghĩa sâu sắc hơn, theo như tôi biết. Vì vậy, tôi đã xây dựng MVView MultiViewSwitcher của riêng mình, dựa trên ViewSwitcher.java gốc từ nguồn Android. Những thay đổi duy nhất mà phải được thực hiện như sau:

  1. Cung cấp MVS với riêng
    • mFirstTime boolean và
    • int mWhichChild
  2. Đúng hardcoded vào xử lý năng động của một số bất kỳ quan điểm trong các chức năng
    • addView (...)
    • getNextView()
    • reset()

này đều có thể được thực hiện trong một mình MultipleViewSwitcher.java và hoạt động giống như một nét duyên dáng.

Tôi đã tham gia vào một loạt các nội dung như vậy, nơi các nguồn Android có thể được thực hiện mạnh mẽ hơn nhiều, nhiều lần, gần như không có trí tuệ-chỉnh sửa. Tôi muốn biết tại sao đó là, nhưng đó không phải là chủ đề này ở đây.

cổ vũ!

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