2013-08-14 37 views
20

Tôi đang tạo một ứng dụng android và tôi có một nút dẫn đến địa điểm nhắn tin. Về hoạt động với nút, tôi kiểm tra xem có bất kỳ tin nhắn chưa đọc nào không và nếu có, tôi muốn làm điều gì đó với nút để cho người dùng biết rằng có điều gì đó chưa đọc.Làm thế nào để nút animate trong android?

Tôi đã nghĩ đến việc nút sorta rung theo chiều ngang như 3 lắc mỗi 2 hoặc 3 giây.

Tôi biết cách chạy chuỗi trong nền hoạt động sau mỗi x mili giây. Nhưng những gì tôi không biết phải làm là lắc nó theo chiều ngang 3 lần.

Có ai có thể trợ giúp việc này không? Tôi đã nghĩ đến việc sử dụng hàm sin, cho hoạt hình, tôi có thể sử dụng đầu ra từ một hàm sin để lấy các giá trị đi lên và xuống, tôi có thể đặt vị trí nằm ngang của nút ... Nhưng điều này có vẻ như quá khắc nghiệt, có cách nào tốt hơn không?

Cảm ơn.

+0

bạn muốn hoạt ảnh hoặc hiệu ứng nhấn nút ?? – Prachi

Trả lời

10

Xem hướng dẫn này. Ông có cách của hình ảnh động khác nhau

http://android-er.blogspot.com/2012/02/apply-animation-on-button.html

+0

Tôi thấy cách di chuyển nó, nhưng làm cách nào để tạo chuỗi chuyển tiếp? Ngay bây giờ nút di chuyển sang phải, sau đó trở lại bình thường, sau đó lặp lại. Nhưng tôi muốn nó di chuyển sang trái một lần nữa. – omega

+0

@omega Tôi rất tiếc. Tôi không chắc chắn về điều đó kể từ bây giờ. Sẽ lấy lại cho bạn nếu tôi có thể tìm ra điều đó. – Deepu

22

tạo shake.xml trong thư mục anim

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0" 
     android:toXDelta="10" 
      android:duration="1000" 
       android:interpolator="@anim/cycle" /> 

và cycle.xml trong thư mục anim

<?xml version="1.0" encoding="utf-8"?> 
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:cycles="4" /> 

bây giờ thêm hình ảnh động trên mã của bạn

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); 
anyview.startAnimation(shake); 

Nếu bạn muốn hoạt ảnh theo chiều dọc, hãy thay đổi từ giá trị Xdelta và toXdelta thành giá trị fromYdelta và toXdelta thành

+3

Điều này chỉ làm cho nó di chuyển 'right' rồi ngay lập tức quay trở lại vị trí ban đầu 4 lần, nhưng làm thế nào để nó di chuyển' right' và sau đó 'left', rồi' right' rồi 'left' quay lại vị trí ban đầu như hiệu ứng lắc? – omega

+0

cách làm cho hoạt ảnh này diễn ra liên tục? – CraZyDroiD

+0

Câu trả lời này là hữu ích cho tôi để thực hiện rung như hình ảnh động trong Android. –

21

Tôi không thể nhận xét về nhận xét của @ omega vì tôi không có đủ danh tiếng nhưng câu trả lời cho câu hỏi đó phải là:

shake.xml

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="100"   <!-- how long the animation lasts --> 
    android:fromDegrees="-5"  <!-- how far to swing left --> 
    android:pivotX="50%"   <!-- pivot from horizontal center --> 
    android:pivotY="50%"   <!-- pivot from vertical center --> 
    android:repeatCount="10"  <!-- how many times to swing back and forth --> 
    android:repeatMode="reverse" <!-- to make the animation go the other way --> 
    android:toDegrees="5" />  <!-- how far to swing right --> 

Class.java

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); 
view.startAnimation(shake); 

Đây chỉ là một cách để làm những gì bạn muốn, có thể có các phương pháp tốt hơn trên mạng.

+0

Làm thế nào tôi có thể lắc nó theo chiều ngang? –

0
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.Transformation; 

public class HeightAnimation extends Animation { 
    protected final int originalHeight; 
    protected final View view; 
    protected float perValue; 

    public HeightAnimation(View view, int fromHeight, int toHeight) { 
     this.view = view; 
     this.originalHeight = fromHeight; 
     this.perValue = (toHeight - fromHeight); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     view.getLayoutParams().height = (int) (originalHeight + perValue * interpolatedTime); 
     view.requestLayout(); 
    } 

    @Override 
    public boolean willChangeBounds() { 
     return true; 
    } 
} 

USS tới:

HeightAnimation heightAnim = new HeightAnimation(view, view.getHeight(), viewPager.getHeight() - otherView.getHeight()); 
heightAnim.setDuration(1000); 
view.startAnimation(heightAnim); 
5


Class.Java

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_with_the_button); 

    final Animation myAnim = AnimationUtils.loadAnimation(this, R.anim.milkshake); 
    Button myButton = (Button) findViewById(R.id.new_game_btn); 
    myButton.setAnimation(myAnim); 
} 

Đối onClick của nút

myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.startAnimation(myAnim); 
    } 
}); 

Tạo anim thư mục trong res thư mục

Nhấp chuột phải vào, res -> New -> thư mục

Tên danh mục mới anim

tạo một tên file xml mới nó milkshake


milkshake.xml

<?xml version="1.0" encoding="utf-8"?> 
    <rotate xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="100" 
     android:fromDegrees="-5" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:repeatCount="10" 
     android:repeatMode="reverse" 
     android:toDegrees="5" />