好的,所以我做了一些环顾四周,我看到你是如何做到这一点的,但对我来说,它只是没有用。
我需要能够在XML和代码中设置RelativeLayout的alpha。对于我的XML,我有以下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/player_controls"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:alpha="0.0">
<RelativeLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/player_controls_touch_me"
>
</RelativeLayout>
</RelativeLayout>
我收到错误:no resource identifier found for attribute 'alpha' in package 'android'
另外,基于Android文档,我应该可以在任何View对象上调用setAlpha(double)
,但是当我尝试在RelativeLayout上进行调用时,它告诉我没有为此对象定义此方法。
为什么我无法在Android中控制RelativeLayout对象的Alpha透明度?我错过了什么吗?谢谢!
更新
虽然使用visibility属性可以工作,但它阻止我能够单击ViewGroup。这对我很重要,因为我正在使用ViewGroup的OnTouchListener。
我想要做的是拥有一个带有媒体控件的图层,最初是隐藏的。当用户点击屏幕上的任何内容时,我希望控件淡入,当他们再次点击屏幕时,我希望控件淡出。我有这个部分已经工作了。我正在使用一个视图组,该视图组位于我的整个应用程序之上,并附带一个OnTouchListener,可以确定它是否已被触及。我的问题是,在动画运行淡出控件后,它们会重新出现。如果我使用@Hydrangea建议,我可以让它淡出并立即变得不可见。这给了我想要的效果,但是ViewGroup是不可点击的,用户无法让控件返回(或消失,取决于我们先决定做什么)。
我希望这是有道理的。
答案 0 :(得分:16)
您需要使用Alpha动画来淡入淡出。这将保持您的布局的触摸事件。这是一个例子
public class Main extends Activity {
/** Called when the activity is first created. */
private boolean mShowing = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViewById(R.id.textview).setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
if(mShowing){
Animation animation = new AlphaAnimation(1.0f, 0.0f);
animation.setFillAfter(true);
arg0.startAnimation(animation);
} else {
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setFillAfter(true);
arg0.startAnimation(animation);
}
mShowing = !mShowing;
}
});
}
}
这是随附的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:clickable="true"
/>
</LinearLayout>
答案 1 :(得分:3)
除非你需要0到1之间的alpha级别,否则我建议,如果你真的想让这个项目不可见,那么使用setVisibility();
android:visibility="invisible"
我检查了android:alpha行,我的ide也找不到它。我猜不出为什么,但......文件似乎很清楚。
答案 2 :(得分:3)
alpha 3.0属性是Android 3.0中的新功能,它不是隐藏视图的最有效方式。使用View.setVisibility()或android:visibility来实现您的目标。
答案 3 :(得分:1)
您可以通过设置(背景)颜色来设置alpha。颜色值的格式可以是#aarrggbb(alpha,red,green,blue)。
答案 4 :(得分:1)
您可以在正确答案中添加以下选项:
animation.setDuration(xxx);
到每个动画实例。通过这种方式,您的动画看起来会更好。
答案 5 :(得分:0)
根据您的描述,您应该能够创建一个仅包含相对布局的视图,并将onClickListener设置为它。这样,您可以将相对布局的可见性设置为不可见,但仍会注册单击。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/clickable_layout"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<RelativeLayout
android:id="@+id/player_controls"
android:layout_height="match_parent"
android:layout_width="match_parent" >
<RelativeLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/player_controls_touch_me"
>
</RelativeLayout>
</RelativeLayout>
</FrameLayout>
答案 6 :(得分:0)
在onTouchEvent中使用Activity,然后即使“不可见”,您也可以通过触摸事件来控制您的RelativeLayout。