android 遮罩层效果
2013-12-31 15:38
363 查看
看到一本电子杂志上有遮罩层的效果,感觉很漂亮,以为很麻烦,搜索了很多关于android遮罩层的,也没有得出一点思路,原来就是一个透明的效果,然后上面弹出的控件是透明或者半透明之类的,可以选择颜色,还是#ARBG,其中A就是传说中的透明色的值(可以根据需要设置透明的效果),废话不多说了,发一个简单的Demo吧,是我山寨的那本杂志的效果:(由于杂志内容主要是图片,弹出层才是给出的文字信息,所以我猜测是用Gallery显示的杂志内容)
xml布局文件:
[c-sharp]
view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/showGallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:spacing="0dip"
/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#86222222"
>
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/secondKillButton"
android:textColor="#ff0000"
/>
<Button
android:id="@+id/unfoldButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="展开"
/>
</RelativeLayout>
</FrameL<textarea name="code" class="xhtml" cols="50" rows="15"><?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/showGallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:spacing="0dip"
/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#86222222"
>
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/secondKillButton"
android:textColor="#ff0000"
/>
<Button
android:id="@+id/unfoldButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="展开"
/>
</RelativeLayout>
</FrameLayout>
主要的代码也很简单,还有一个简单的Adapter,有不理解的朋友可以看我之前的blog
[java]
view plaincopyprint?
package oneRain.UpMagazine;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
public class ShowActivity extends Activity
{
private int i = 1;
private int pos = 0;
private List<String> contents = null;
private static final String DIR = "/mnt/sdcard/UpMagazine/2010/content/";
//设置是否展开
private boolean isFolded = true;
//设置控件
private FrameLayout layout = null;
private Gallery showGallery = null;
private Button unfoldButton = null;
private TextView textView = null;
private TextView titleTextView = null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.show);
initView();
}
@Override
protected void onResume()
{
// TODO Auto-generated method stu
super.onResume();
isFolded = true;
}
//初始化
private void initView()
{
contents = new ArrayList<String>();
File dir = new File(DIR);
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++)
{
contents.add(DIR + files[i].getName());
}
layout = (FrameLayout)findViewById(R.id.layout);
unfoldButton = (Button)findViewById(R.id.unfoldButton);
unfoldButton.setOnClickListener(new UnfoldClickListener());
showGallery = (Gallery)findViewById(R.id.showGallery);
showGallery.setOnItemSelectedListener(new GalleryOnItemSelectedListener());
showGallery.setAdapter(new ShowAdapter());
titleTextView = (TextView)findViewById(R.id.titleTextView);
}
//滑动监听
private class GalleryOnItemSelectedListener implements OnItemSelectedListener
{
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
pos = arg2 + 1;
titleTextView.setText("第" + pos +"个主题");
}
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
}
//按钮监听,展开一个透明的显示文本的遮挡层
private class UnfoldClickListener implements OnClickListener
{
public void onClick(View v)
{
if(isFolded)
{
textView = new TextView(ShowActivity.this);
textView.setTextColor(Color.BLUE);
textView.setTextSize(20);
textView.setText("滚滚长江东逝水,浪花淘尽英雄。/n" +
"是非成败转头空,/n" +
"青山依旧在,几度夕阳红。/n" +
"白发渔樵江渚上,惯看秋月春风。 /n" +
"一壶浊酒喜相逢,/n" +
"古今多少事,都付笑谈中。");
textView.setGravity(Gravity.CENTER);
textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
textView.setBackgroundColor(Color.parseColor("#86222222"));
unfoldButton.setText("收回");
isFolded = false;
layout.addView(textView);
}
else
{
unfoldButton.setText("展开");
isFolded = true;
layout.removeView(textView);
}
}
}
private class ShowAdapter extends BaseAdapter
{
public int getCount()
{
// TODO Auto-generated method stub
return contents.size();
}
public Object getItem(int position)
{
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position)
{
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
ImageView i = new ImageView(ShowActivity.this);
Bitmap bm = BitmapFactory.decodeFile(contents.get(position));
// i.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.FILL_PARENT,
// Gallery.LayoutParams.FILL_PARENT));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setImageBitmap(bm);
return i;
}
}
}
效果如下:
![](http://hi.csdn.net/attachment/201105/24/0_1306206296l6Og.gif)
xml布局文件:
[c-sharp]
view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/showGallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:spacing="0dip"
/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#86222222"
>
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/secondKillButton"
android:textColor="#ff0000"
/>
<Button
android:id="@+id/unfoldButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="展开"
/>
</RelativeLayout>
</FrameL<textarea name="code" class="xhtml" cols="50" rows="15"><?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Gallery
android:id="@+id/showGallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:spacing="0dip"
/>
<RelativeLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#86222222"
>
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/secondKillButton"
android:textColor="#ff0000"
/>
<Button
android:id="@+id/unfoldButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="展开"
/>
</RelativeLayout>
</FrameLayout>
主要的代码也很简单,还有一个简单的Adapter,有不理解的朋友可以看我之前的blog
[java]
view plaincopyprint?
package oneRain.UpMagazine;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
public class ShowActivity extends Activity
{
private int i = 1;
private int pos = 0;
private List<String> contents = null;
private static final String DIR = "/mnt/sdcard/UpMagazine/2010/content/";
//设置是否展开
private boolean isFolded = true;
//设置控件
private FrameLayout layout = null;
private Gallery showGallery = null;
private Button unfoldButton = null;
private TextView textView = null;
private TextView titleTextView = null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.show);
initView();
}
@Override
protected void onResume()
{
// TODO Auto-generated method stu
super.onResume();
isFolded = true;
}
//初始化
private void initView()
{
contents = new ArrayList<String>();
File dir = new File(DIR);
File[] files = dir.listFiles();
for(int i=0; i<files.length; i++)
{
contents.add(DIR + files[i].getName());
}
layout = (FrameLayout)findViewById(R.id.layout);
unfoldButton = (Button)findViewById(R.id.unfoldButton);
unfoldButton.setOnClickListener(new UnfoldClickListener());
showGallery = (Gallery)findViewById(R.id.showGallery);
showGallery.setOnItemSelectedListener(new GalleryOnItemSelectedListener());
showGallery.setAdapter(new ShowAdapter());
titleTextView = (TextView)findViewById(R.id.titleTextView);
}
//滑动监听
private class GalleryOnItemSelectedListener implements OnItemSelectedListener
{
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
// TODO Auto-generated method stub
pos = arg2 + 1;
titleTextView.setText("第" + pos +"个主题");
}
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
}
//按钮监听,展开一个透明的显示文本的遮挡层
private class UnfoldClickListener implements OnClickListener
{
public void onClick(View v)
{
if(isFolded)
{
textView = new TextView(ShowActivity.this);
textView.setTextColor(Color.BLUE);
textView.setTextSize(20);
textView.setText("滚滚长江东逝水,浪花淘尽英雄。/n" +
"是非成败转头空,/n" +
"青山依旧在,几度夕阳红。/n" +
"白发渔樵江渚上,惯看秋月春风。 /n" +
"一壶浊酒喜相逢,/n" +
"古今多少事,都付笑谈中。");
textView.setGravity(Gravity.CENTER);
textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
textView.setBackgroundColor(Color.parseColor("#86222222"));
unfoldButton.setText("收回");
isFolded = false;
layout.addView(textView);
}
else
{
unfoldButton.setText("展开");
isFolded = true;
layout.removeView(textView);
}
}
}
private class ShowAdapter extends BaseAdapter
{
public int getCount()
{
// TODO Auto-generated method stub
return contents.size();
}
public Object getItem(int position)
{
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position)
{
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
ImageView i = new ImageView(ShowActivity.this);
Bitmap bm = BitmapFactory.decodeFile(contents.get(position));
// i.setLayoutParams(new Gallery.LayoutParams(Gallery.LayoutParams.FILL_PARENT,
// Gallery.LayoutParams.FILL_PARENT));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setImageBitmap(bm);
return i;
}
}
}
效果如下:
![](http://hi.csdn.net/attachment/201105/24/0_1306206296l6Og.gif)
![](http://hi.csdn.net/attachment/201105/24/0_1306206350NxmW.gif)
相关文章推荐
- Android Studio使用
- Android--AlertDialog对话框
- Android源码之“应用程序界面“分析一( 从settings开始)
- Android设备获取wifi下的ipv6地址
- Custom view com/android/cricle/Circleview is missing constructor used by tools: (Context) or (Context,AttributeSet) or (Context,AttributeSet,int)(转)
- Android单元测试参考文章
- Android判断当前应用程序处于前台还是后台的两种方法
- android 自定义多功能按钮(转盘样式)
- Android中Bitmap和Drawable
- Android高级应用开发(基础篇) - stage4 - 学习笔记
- handler<1>
- Android布局类型资源简介
- [原]Android布局类型资源简介
- Android AsyncTask运作原理和源码分析
- Android 中的Resource
- Android 05 AIDL
- Android 04 IntentService
- Android 03 Bound Service--之被绑定的服务
- Android Handle SendMessage
- android开发有关GridView正方形自适应显示