2017-10-27 17 views
0

Androidスタジオでアプリを作成すると、すべての論理部分が終了しますが、まだ迷惑なものがいくつかあります。私のアプリでボタンをクリックして背景の画面(画像)をアニメーションで変更します。

、私は

android:background="@drawable/firstimg" 

によってレイアウトの背景画像を定義し、このコードでボタンをクリックすることによって背景を変更している:

mainLayout.setBackgroundResource(R.drawable.third); 

そして、背景が変わったのですが、問題は背景がどのように変わったかということです。

アニメーションを使用して背景イメージを変更する必要があります。

私はmainLayoutの背景画像を定義していますので、私は移行でそれをやろうとしましたが、imageSwitcherを使用することはできませんが、アプリをスタックして非常に遅く続きます。私はここで少し助けてうれしい。

+0

MainActivity imageView。イメージは「android:background」にのみあります –

+0

私の答えをテストするためのアクティビティを作成することができます。それは私のデバイスで喚起されました。あなたはそれをチェックすることができます。 – KeLiuyue

+0

私はこれが働いていると信じています、問題は私のプロジェクトには適していません、なぜなら私は "imageView"を使わないからです。 私のプロジェクトでは、背景はXMLであり、プロジェクトではimageViewを使用しています。たぶん私はあなたがimageViewを使用する任意の提案を持っていますが、imageView moreウィジェット(ボタン、より多くの画像など)を置く ありがとう! –

答えて

0

コードにclipを使用できます。

このようにしてください。

clip_drawable.xml

<?xml version="1.0" encoding="utf-8"?> 
<clip xmlns:android="http://schemas.android.com/apk/res/android" 
    android:clipOrientation="horizontal|vertical" 
    android:drawable="@drawable/firstimg" 
    android:gravity="center_horizontal|center_vertical"> 

</clip> 

activity_main

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<ImageView 
    android:id="@+id/iv" 
    android:layout_width="300dp" 
    android:layout_height="400dp" 
    android:layout_centerHorizontal="true" 
    android:padding="0dp" 
    android:scaleType="fitXY" 
    android:src="@drawable/clip_drawable" /> 

<Button 
    android:id="@+id/btn" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/iv" 
    android:layout_marginTop="3dp" 
    android:gravity="center" 
    android:onClick="setImage" 
    android:text="set Image" /> 

<Button 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/btn" 
    android:layout_marginTop="3dp" 
    android:gravity="center" 
    android:onClick="changeImage" 
    android:text="change Image" /> 

</RelativeLayout> 

私は追加カントので、それが働いていなかった

public class MainActivity extends AppCompatActivity { 

private static final int CHANGE_LEVEL = 99; 
private ImageView iv; 
private ClipDrawable mClipDrawable; 
private boolean isExpand = false; 

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

    iv = (ImageView) findViewById(R.id.iv); 
    mClipDrawable = (ClipDrawable) iv.getDrawable(); 
    mClipDrawable.setLevel(10); 
} 

public void setImage(View view) { 
    if (!isExpand) { 
     isExpand = true; 
     final Handler mHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
       if (msg.what == CHANGE_LEVEL) { 
        int level = mClipDrawable.getLevel() + 50; 
        if (level >= 10000) { 
         level = 10000; 
        } 
        mClipDrawable.setLevel(level); 
       } 
      } 
     }; 
     final CountDownTimer timer = new CountDownTimer(Integer.MAX_VALUE, 10) { 
      @Override 
      public void onTick(long millisUntilFinished) { 

       if (mClipDrawable.getLevel() >= 10000) { 
        this.onFinish(); 
       } else { 
        mHandler.sendEmptyMessage(99); 
       } 

      } 

      @Override 
      public void onFinish() { 
       isExpand = false; 
      } 
     }; 
     timer.start(); 
    } 
} 

public void changeImage(View view) { 
    if (iv.getDrawable() != null) { 
     iv.setBackground(iv.getDrawable()); 
    } 
    // change image here 
    final ClipDrawable imageDrawable = new ClipDrawable(getResources().getDrawable(R.drawable.third), Gravity.TOP | Gravity.START, ClipDrawable.VERTICAL); 
    iv.setImageDrawable(imageDrawable); 
    imageDrawable.setLevel(10); 
    if (!isExpand) { 
     isExpand = true; 
     final Handler mHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
       if (msg.what == CHANGE_LEVEL) { 
        int level = imageDrawable.getLevel() + 50; 
        if (level >= 10000) { 
         level = 10000; 
        } 
        imageDrawable.setLevel(level); 
       } 
      } 
     }; 
     final CountDownTimer timer = new CountDownTimer(Integer.MAX_VALUE, 10) { 
      @Override 
      public void onTick(long millisUntilFinished) { 

       if (imageDrawable.getLevel() >= 10000) { 
        this.onFinish(); 
       } else { 
        mHandler.sendEmptyMessage(99); 
       } 

      } 

      @Override 
      public void onFinish() { 
       isExpand = false; 
      } 
     }; 
     timer.start(); 
    } 
} 
} 
関連する問題