2017.12.07 更新:
应该是Android L后针对Drawable的优化,在同个进程中虽然是两个不同的View,可创建的background Drawable使用的相同的资源id。
应该就是共享了Drawable 的相同的ConstantStateFuture对象,具体可以看看StateListDrawable和LevelListDrawable相关实现mutate()。
解决方法:
findViewById(R.id.tv_finish).getBackground().mutate().setAlpha(50);
------------------------------------------
对某一颜色,设置透明度 alpha 后,其他使用该颜色的地方 受到影响!!!!原因未知 测试了以下三款手机,结果如下: 1.android 4.4.2: 不受影响 2.android 5.1.1: 受影响3.android 7.0: 受影响
首页:
findViewById(R.id.tv_go).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this, BActivity.class)); } });
<TextView android:id="@+id/tv_go" android:layout_width="200dp" android:layout_height="100dp" android:layout_centerInParent="true" android:background="@color/colorAccent" android:gravity="center" android:text="下一页" android:textColor="@color/colorPrimary" />
BActivity:
findViewById(R.id.tv_finish).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { findViewById(R.id.tv_finish).getBackground().setAlpha(50); // finish(); } });
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_b" 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="com.dzq.alphademo.BActivity"> <TextView android:id="@+id/tv_finish" android:layout_width="200dp" android:layout_height="100dp" android:layout_centerInParent="true" android:background="@color/colorAccent" android:gravity="center" android:text="setAlpha(50)" android:textColor="@color/colorPrimary" /> </RelativeLayout>