29

私はアンドロイドアプリを作っています.メッセージの場所につながるボタンがあります. ボタンを使用したアクティビティで、未読メッセージがあるかどうかを確認し、未読メッセージがある場合はボタンに何かを実行して、未読メッセージがあることをユーザーに知らせたいと考えています。

ボタンを2〜3秒ごとに3回振るように横に振動させることを考えていました。

xミリ秒ごとに何かを行うスレッドをバックグラウンドで実行する方法を知っています。でもどうしたらいいか分からないのは、横に3回振るだけです。

誰でもこれを手伝ってもらえますか?

sin 関数を使用することを考えていました。アニメーションでは、sin 関数からの出力を使用して上下する値を取得し、ボタンの水平位置を設定できます...しかし、これは極端すぎるようです。より良い方法はありますか?

4

7 に答える 7

31

十分な評判がないため、@omega のコメントにコメントすることはできませんが、その質問に対する答えは次のようになります。

シェイク.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);

これはあなたが望むことを行うための 1 つの方法にすぎません。他にもっと良い方法があるかもしれません。

于 2014-02-26T06:06:20.547 に答える
28

animフォルダにshake.xmlを作成

<?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" />

animフォルダーのcycle.xml

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

コードにアニメーションを追加する

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

垂直方向のアニメーションが必要な場合は、fromXdelta と toXdelta の値を fromYdelta と toYdelta の値に変更します。

于 2013-08-14T04:48:05.770 に答える