如何通过改变imageview的颜色使动画像眨眼一样?

时间:2017-11-09 08:36:51

标签: android bitmap android-imageview

我正在制作音乐游戏。如果用户按提示按钮以知道要按哪个键。我希望通过以编程方式将ImageView颜色从一种颜色改为另一种颜色(在两种颜色之间切换)1秒钟,在bitmap上显示闪烁效果。

这就是我以编程方式更改位图颜色的方法:

nextImage.setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.MULTIPLY);

我认为我们可以使用Handler,但我不知道如何产生眨眼效果。

5 个答案:

答案 0 :(得分:0)

你可以使用处理程序

.csv

答案 1 :(得分:0)

你可以达到你想要的效果。

创建3个可绘制文件。

第一个可绘制的

// color1.xml

 <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
 android:shape="rectangle">
 <solid android:color="#hexcodeofcolor1" />
 <corners android:bottomRightRadius="8dip"
    android:bottomLeftRadius="8dip"  
    android:topRightRadius="8dip"
    android:topLeftRadius="8dip"/>
 </shape>

color2.xml

 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
  android:shape="rectangle">
 <solid android:color="#hexcodeofcolor2" />
 <corners android:bottomRightRadius="8dip"
    android:bottomLeftRadius="8dip"  
    android:topRightRadius="8dip"
    android:topLeftRadius="8dip"/>
  </shape>

imageviewtempgif.xml

  <?xml version="1.0" encoding="utf-8"?>
  <animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
android:useLevel="true">

<item
    android:drawable="@drawable/hexcodeofcolor1"
    android:duration="500"
    android:useLevel="true"/>
<item
    android:drawable="@drawable/hexcodeofcolor2"
    android:duration="500"
    android:useLevel="true"/>
  </animation-list>

并在您的代码中

imageView.setImageResource(R.drawable.imageviewtempgif);
    ((Animatable) imgWiFi.getDrawable()).start();

完成动画后,您可以设置所需的任何背景。

可能是这样的。

imageView.setImageResource(R.drawable.imageviewtempgif);
    ((Animatable) imgWiFi.getDrawable()).start();
 final Handler handler = new Handler();
 handler.postDelayed(new Runnable() {
 @Override
  public void run() {
  //set to normal background.
  }
  }, 1000);

答案 2 :(得分:0)

我通过以下方式实现了眨眼效果:

final String[] colors = {"#00BCD4","#FFFFFF","#00BCD4","#FFFFFF","#00BCD4","#FFFFFF","#00BCD4","#FFFFFF"};
                        for(int i=0;i<8;i++){
                            final int j = i;
                            new Handler().postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    nextImage.setColorFilter(Color.parseColor(colors[j]), PorterDuff.Mode.MULTIPLY);
                                }
                            },200 * j);

希望这可能有助于其他人。如果有更好的方法可以做到这一点。建议。

答案 3 :(得分:0)

你可以实现这种混合两种颜色,这样不断改变这两种颜色

/**
     * Blend {@code color1} and {@code color2} using the given ratio.
     *
     * @param ratio of which to blend. 0.0 will return {@code color1}, 0.5 will give an even blend,
     *              1.0 will return {@code color2}.
     */
    public static int blendColors(int color1, int color2, float ratio) {
        final float inverseRatio = 1f - ratio;
        float a = (Color.alpha(color1) * inverseRatio) + (Color.alpha(color2) * ratio);
        float r = (Color.red(color1) * inverseRatio) + (Color.red(color2) * ratio);
        float g = (Color.green(color1) * inverseRatio) + (Color.green(color2) * ratio);
        float b = (Color.blue(color1) * inverseRatio) + (Color.blue(color2) * ratio);
        return Color.argb((int) a, (int) r, (int) g, (int) b);
    }

答案 4 :(得分:0)

在res> color文件夹中创建颜色文件,即icon_click_color.xml,其代码如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="@color/colorDefault" />
    <item android:state_focused="true" android:state_pressed="true" android:color="@color/colorPressed" />
    <item android:state_focused="false" android:state_pressed="true" android:color="@color/colorPressed" />
    <item android:color="@color/colorDefault" />
</selector>

然后,在您的ImageView中,设置tint属性,例如:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_menu_setting"
    app:tint="@color/icon_click_color">
</ImageView>