Android buttonimage shake animation
Asked Answered
F

1

14

I am new with android and im looking for a way to shake my buttonimage on click. I got this so far but it crashes all the time. Or if you click it nothing works. I hope you people can help me out. if i forgot anythiing just say it. code can be messy.

i got a anim folder. with shakeanim.xml

code:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >

     <ImageButton
         android:id="@+id/imageButton1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_centerVertical="true"
         android:src="@drawable/chest"
        android:background="@null"/>

     <TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_above="@+id/imageButton1"
         android:layout_centerHorizontal="true"
         android:layout_marginBottom="51dp"
         android:text="100 Clicks" />

</RelativeLayout>

MainActivity.java

package com.example.egghatcher;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageButton;
import android.widget.TextView;


public class MainActivity extends Activity {

    ImageButton imageButton;

    TextView clicksToGo;

    Animation shake;

    private int clicks = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        shake = AnimationUtils.loadAnimation(this, R.anim.shakeanim);
    }

    public void addListenerOnButton() {

        imageButton = (ImageButton) findViewById(R.id.imageButton1);

        clicksToGo = (TextView)findViewById(R.id.textView1);

        imageButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                clicks--;               
                clicksToGo.setText("You need to click " + clicks + " more times to open it");
                findViewById(R.id.imageButton1).startAnimation(shake);  
            } 
        });

    }


}

shakeanim.xml

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

    android:toXDelta="10" />
Fite answered 17/2, 2014 at 19:27 Comment(3)
if you really want it to shake you should use custom interpolaror that goes back and forthCanzonet
Unfortunately you can’t use the interpolator in your XML resource of the animation and it is only available programmatically.Inflated
Check this: #9449232Ophthalmologist
T
19

Replace your shakeanim.xml file with this.

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:duration="150"
        android:fromXDelta="-10%"
        android:repeatCount="5"
        android:repeatMode="reverse"
        android:toXDelta="10%"/>
</set>

btw you can change your MainActivity "setOnClickListener" like this as you have already declared imageButton.

imageButton.setOnClickListener(new OnClickListener() {

            @Override 
            public void onClick(View v) {
                clicks--;               
                clicksToGo.setText("You need to click " + clicks + " more times to open it");
                imageButton.startAnimation(shake);  
            }  
        }); 

If this helps please mark it as the right answer. Thank you

Tallu answered 13/8, 2015 at 17:17 Comment(3)
the animation jumps!Terryterrye
what's with this formXDeltaBegum
android:duration="50" looks way less choppy in my opinion, and looks much betterCensus

© 2022 - 2024 — McMap. All rights reserved.