Bạn muốn ứng
dụng có dãy đèn nhấp nháy để trang trí, nhìn cho vui mắt, ta sẽ làm thế nào ?
Hãy chuẩn bị
các ảnh màu hình tròn giống hệt nhau, chỉ khác nhau màu sắc ở giữa.
Tạo một
LinearLayout với các ảnh nằm ngang một dãy như sau.
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
>
<ImageView
android:id="@+id/img1"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
/>
<ImageView
android:id="@+id/img2"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
/>
<ImageView
android:id="@+id/img3"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
/>
<ImageView
android:id="@+id/img4"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
/>
<ImageView
android:id="@+id/img5"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:contentDescription="@null"
/>
</LinearLayout>
Các ảnh có
kích thước y như nhau, chỉ khác màu, khi ta thay đổi chúng sẽ tạo ra hiệu ứng
giống như đang nhấp nháy. Chú ý là ta không set sẵn ảnh vào layout, các đoạn
code xml không có dòng android:src="@drawable/tên
ảnh"
Hãy khai báo
một biến đếm ngược CountDownTimer w;
lên trên dòng
Override để nó là biến toàn cục.
Nhập thư viện
cần dùng vào.
Copy đoạn
code sau vào dưới các dòng findViewByid.
w=new
CountDownTimer(3000000, 1000) {
public void onTick(long mil) {
if(mil%3==0){
im.setBackgroundResource(R.drawable.l1);
im2.setBackgroundResource(R.drawable.l2);
im3.setBackgroundResource(R.drawable.l3);
im4.setBackgroundResource(R.drawable.l1);
im5.setBackgroundResource(R.drawable.l2);
}
else if(mil%3==1){
im.setBackgroundResource(R.drawable.l2);
im2.setBackgroundResource(R.drawable.l3);
im3.setBackgroundResource(R.drawable.l1);
im4.setBackgroundResource(R.drawable.l2);
im5.setBackgroundResource(R.drawable.l3);
}
else {
im.setBackgroundResource(R.drawable.l3);
im2.setBackgroundResource(R.drawable.l1);
im3.setBackgroundResource(R.drawable.l2);
im4.setBackgroundResource(R.drawable.l3);
im5.setBackgroundResource(R.drawable.l1);
}
}
public void onFinish()
{
}
}.start();
ở
đây ta dùng biến đếm ngược, cho số thời gian thật lớn CountDownTimer(3000000,
1000)
Số
1000 tức là thời gian đếm ngược tính theo 1 giây.
Bên
dưới ta thay đổi ảnh theo thời gian, có ba pha ảnh, cứ 1, 2, 3 giây lại có ảnh
thay đổi, ta chia thời gian cho 3 lấy số dư để xác định.
Giả
sử có 5 ảnh, ta sẽ chia cho 5, lấy thành 5 pha vào lệnh if.
Trong
public void
onFinish() ta
không làm gì vì ta chỉ để nó nhấp nháy thế thôi, đặt thời gian lớn cho thành
hàng giờ, đủ để người dùng đã xong ứng dụng.
Nếu
là đếm ngược thời gian trong game, thì khi hết giờ ta set ra thông báo game
over, lệnh đó sẽ ở trong onFinish().
Ở
đây ta chỉ lợi dụng sự thay đổi thời gian để thay đổi ảnh, tạo ra hiệu ứng
trang trí.
Để
khi người dùng ấn nút Back thì hủy đi tất cả, ta thêm các dòng sau vào trên ngoặc
đóng cuối cùng.
public void onBackPressed()
{
w.cancel();
finish();
}
No comments:
Post a Comment