Android界面编程之七 第六组UI组件:ViewAnimator及其子类
来源:互联网 发布:大专转行数据分析师 编辑:程序博客网 时间:2024/06/07 14:35
ViewAnimator是一个基类,它继承了FrameLayout,可以将多个View组件 叠在一起;可在切换View时表现动画效果
ViewAnimator 支持的常见XML属性有:
android:animateFistView
显示第一个View组件时是否显示动画android:inAnimation
设置ViewAnimator显示组件时使用的动画
android:outAnimation
设置ViewAnimator隐藏组件时使用的动画
实际项目中一般使用ViewAnimator的几个子类
2.7.1 ViewSwitcher的功能与用法
为了给ViewSwitcher添加多个组件,一般通过调用ViewSwitcher的SetFactory(ViewSwitcher.ViewFactory)方法为之设置ViewFactory,并由该ViewFactory为之创建View
示例代码:
publicclassMainActivity extends ActionBarActivity {
publicstaticfinalintNUMBER_PER_SCREEN= 12;
publicstaticclassDataItem {
publicString dataName;
publicDrawable drawable;
}
privateArrayList<DataItem> items = new ArrayList<DataItem>();
privateintscreenNo= -1;
privateintscreenCount;
ViewSwitcher switcher;
LayoutInflater inflater;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inflater= LayoutInflater.from(MainActivity.this);
for(inti = 0; i < 40; i++) {
String label = "" + i;
Drawable drawable = getResources().getDrawable(
R.drawable.ic_launcher);
DataItem item = new DataItem();
item.dataName= label;
item.drawable= drawable;
items.add(item);
}
screenCount= items.size() % NUMBER_PER_SCREEN == 0 ?items.size()
/ NUMBER_PER_SCREEN: items.size() / NUMBER_PER_SCREEN + 1;
switcher= (ViewSwitcher) findViewById(R.id.viewSwitcher);
switcher.setFactory(newViewFactory()
{
@Override
publicView makeView()
{
returninflater.inflate(R.layout.slideviewlist,null);
}
});
next(null);
}
publicvoidnext(View v)
{
if(screenNo< screenCount -1)
{
screenNo++;
switcher.setInAnimation(this, R.anim.slide_in_right);
switcher.setOutAnimation(this, R.anim.slide_out_left);
((GridView) switcher.getNextView()).setAdapter(adapter);
switcher.showNext();
}
}
publicvoidprev(View v)
{
if(screenNo> 0)
{
screenNo--;
switcher.setInAnimation(this, R.anim.slide_in_right);
switcher.setOutAnimation(this, R.anim.slide_out_left);
((GridView) switcher.getNextView()).setAdapter(adapter);
switcher.showPrevious();
}
}
privateBaseAdapter adapter = new BaseAdapter()
{
@Override
publicintgetCount()
{
if(screenNo== screenCount - 1
&& items.size() %NUMBER_PER_SCREEN!= 0)
{
returnitems.size() %NUMBER_PER_SCREEN;
}
returnNUMBER_PER_SCREEN;
}
@Override
publicDataItem getItem(intposition)
{
returnitems.get(screenNo* NUMBER_PER_SCREEN + position);
}
@Override
publiclonggetItemId(intposition)
{
returnposition;
}
@Override
publicView getView(intposition,
View convertView, ViewGroup parent)
{
View view = convertView;
if(convertView == null)
{
view = inflater.inflate(R.layout.labelicon,null);
}
ImageView imageView = (ImageView)
view.findViewById(R.id.imageview);
imageView.setImageDrawable (getItem(position).drawable);
TextView textView = (TextView)
view.findViewById(R.id.textview);
textView.setText(getItem(position).dataName);
returnview;
}
publicstaticfinalintNUMBER_PER_SCREEN= 12;
publicstaticclassDataItem {
publicString dataName;
publicDrawable drawable;
}
privateArrayList<DataItem> items = new ArrayList<DataItem>();
privateintscreenNo= -1;
privateintscreenCount;
ViewSwitcher switcher;
LayoutInflater inflater;
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inflater= LayoutInflater.from(MainActivity.this);
for(inti = 0; i < 40; i++) {
String label = "" + i;
Drawable drawable = getResources().getDrawable(
R.drawable.ic_launcher);
DataItem item = new DataItem();
item.dataName= label;
item.drawable= drawable;
items.add(item);
}
screenCount= items.size() % NUMBER_PER_SCREEN == 0 ?items.size()
/ NUMBER_PER_SCREEN: items.size() / NUMBER_PER_SCREEN + 1;
switcher= (ViewSwitcher) findViewById(R.id.viewSwitcher);
switcher.setFactory(newViewFactory()
{
@Override
publicView makeView()
{
returninflater.inflate(R.layout.slideviewlist,null);
}
});
next(null);
}
publicvoidnext(View v)
{
if(screenNo< screenCount -1)
{
screenNo++;
switcher.setInAnimation(this, R.anim.slide_in_right);
switcher.setOutAnimation(this, R.anim.slide_out_left);
((GridView) switcher.getNextView()).setAdapter(adapter);
switcher.showNext();
}
}
publicvoidprev(View v)
{
if(screenNo> 0)
{
screenNo--;
switcher.setInAnimation(this, R.anim.slide_in_right);
switcher.setOutAnimation(this, R.anim.slide_out_left);
((GridView) switcher.getNextView()).setAdapter(adapter);
switcher.showPrevious();
}
}
privateBaseAdapter adapter = new BaseAdapter()
{
@Override
publicintgetCount()
{
if(screenNo== screenCount - 1
&& items.size() %NUMBER_PER_SCREEN!= 0)
{
returnitems.size() %NUMBER_PER_SCREEN;
}
returnNUMBER_PER_SCREEN;
}
@Override
publicDataItem getItem(intposition)
{
returnitems.get(screenNo* NUMBER_PER_SCREEN + position);
}
@Override
publiclonggetItemId(intposition)
{
returnposition;
}
@Override
publicView getView(intposition,
View convertView, ViewGroup parent)
{
View view = convertView;
if(convertView == null)
{
view = inflater.inflate(R.layout.labelicon,null);
}
ImageView imageView = (ImageView)
view.findViewById(R.id.imageview);
imageView.setImageDrawable (getItem(position).drawable);
TextView textView = (TextView)
view.findViewById(R.id.textview);
textView.setText(getItem(position).dataName);
returnview;
}
};
}
xml代码:
main.xml
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iamge"
android:layout_width="match_parent"
android:layout_height="240px"
android:src="@drawable/lijiang"
/>
<RatingBar
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:max="255"
android:progress="255"
android:stepSize="0.5"
/>
</LinearLayout>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iamge"
android:layout_width="match_parent"
android:layout_height="240px"
android:src="@drawable/lijiang"
/>
<RatingBar
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:max="255"
android:progress="255"
android:stepSize="0.5"
/>
</LinearLayout>
slideviewlist.xml
<?xmlversion="1.0"encoding="utf-8"?>
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:numColumns="4"
android:layout_height="match_parent">
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:numColumns="4"
android:layout_height="match_parent">
</GridView>
2.7.2 图像切换器的功能与用法 ImagesSwitcher
ImageSwitcher继承了ViewSwitcher,并重写了ViewSwitcher的showNext()、showPrevious()方法,因此ImageSwitcher使用起来更加简单。使用ImageSwitcher只要如下两步即可:
1.ImageSwitcher提供一个ViewFactory,该ViewFactory生成View组件必须是ImageView
2.需要切换图片时,只要调用ImageSwitcher的setImageDrawable(Drawable drawable)、setImageResource(int reside) 和setImageURI(Uri uri)方法更换图片即可
示例代码:
publicclassMainActivity extends ActionBarActivity {
int[]imageIds= new int[]
{
R.drawable.bomb5, R.drawable.bomb6, R.drawable.bomb7
, R.drawable.bomb8, R.drawable.bomb9, R.drawable.bomb10
, R.drawable.bomb11, R.drawable.bomb12, R.drawable.bomb13
, R.drawable.bomb14, R.drawable.bomb15, R.drawable.bomb16
};
ImageSwitcher switcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Map<String, Object>> listItems =
newArrayList<Map<String, Object>>();
for(inti = 0; i < imageIds.length; i++)
{
Map<String, Object> listItem = new HashMap<String, Object>();
listItem.put("image",imageIds[i]);
listItems.add(listItem);
}
switcher = (ImageSwitcher) findViewById(R.id.switcher);
switcher.setFactory(newViewFactory()
{
@Override
publicView makeView()
{
ImageView imageView = new ImageView(MainActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(newImageSwitcher.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
returnimageView;
}
});
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
R.layout.cell,newString[]{"iamge"},
newint[]{R.id.image1});
GridView grid = (GridView) findViewById(R.id.grid01);
grid.setAdapter(simpleAdapter);
grid.setOnItemSelectedListener(newOnItemSelectedListener()
{
@Override
publicvoidonItemSelected(AdapterView<?> parent, View view,intposition, long id)
{
switcher.setImageResource(imageIds[position]);
}
@Override
publicvoidonNothingSelected(AdapterView<?> parent)
{
}
});
grid.setOnItemClickListener(newOnItemClickListener()
{
@Override
publicvoidonItemClick(AdapterView<?> parent, View view,intposition, long id)
{
switcher.setImageResource(imageIds[position]);
}
});
}
}
2.7.3 文本切换器 TextSwitcher
可指定文本切换时的动画效果
实例代码:
publicclassMainActivity extends ActionBarActivity {
TextSwitcher textSwitcher;
String[] strs = new String[]
{
"crazy it",
"crazy world",
"crazy programmer"
};
intcurStr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textSwitcher = (TextSwitcher) findViewById(R.id.textSwitcher);
textSwitcher.setFactory(newViewSwitcher.ViewFactory() {
@Override
publicView makeView() {
//TODOAuto-generated method stub
TextView tv = new TextView(MainActivity.this);
tv.setTextSize(40);
tv.setTextColor(Color.MAGENTA);
returntv;
// return null;
}
});
}
public void next(View source)
{
textSwitcher.setText(strs[curStr++ % strs.length]);
TextSwitcher textSwitcher;
String[] strs = new String[]
{
"crazy it",
"crazy world",
"crazy programmer"
};
intcurStr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textSwitcher = (TextSwitcher) findViewById(R.id.textSwitcher);
textSwitcher.setFactory(newViewSwitcher.ViewFactory() {
@Override
publicView makeView() {
//TODOAuto-generated method stub
TextView tv = new TextView(MainActivity.this);
tv.setTextSize(40);
tv.setTextColor(Color.MAGENTA);
returntv;
// return null;
}
});
}
public void next(View source)
{
textSwitcher.setText(strs[curStr++ % strs.length]);
}
}
2.7.4 ViewFlipper
ViewFlipper可以指定与AdapterViewFlipper相同的XML属性;
ViewFlipper需要开发者通过addView(View v) 添加多个View,而AdapterViewFlipper则只要传入一个Adapter(Adapter负责提供多个View)。
0 0
- Android界面编程之七 第六组UI组件:ViewAnimator及其子类
- UI组件:ViewAnimator及其子类
- Android界面编程之三 第二组UI组件:TextView及其子类
- Android界面编程之四 第三组UI组件:ImageView及其子类
- Android界面编程之五 第四组UI组件:AdapterView及其子类
- Android界面编程之六 第五组UI组件:ProgressBar及其子类
- 【android_温故知新】第 6 组 UI 组件:ViewAnimator 及其子类
- Android ViewAnimator及其子类
- 安卓UI控件-ViewAnimator及其子类
- ViewAnimator 之(三) ViewAnimator及其子类分析
- android基础-ProgressBar及其子类和ViewAnimator及其子类
- ViewAnimator及其子类
- VIewAnimator及其子类
- UI组件之TextView及其子类
- Android的ViewAnimator及其子类ViewSwitcher-android学习之旅(三十三)
- android视图切换动画:ViewAnimator类及其子类
- UI组件:TextView及其子类
- UI组件:ImageView及其子类
- 动态增大的栈
- Android界面编程之六 第五组UI组件:ProgressBar及其子类
- HDU 2614 DFS
- Dot Net 使用 itextsharp 类库创建PDF文件
- mybatis入门教程
- Android界面编程之七 第六组UI组件:ViewAnimator及其子类
- 初识Linux
- Android界面编程之八 各种杂项组件
- Android界面编程之九 对话框
- poj 1221 dp(UNIMODAL PALINDROMIC DECOMPOSITIONS)
- Android界面编程之十 菜单
- Android界面编程之十一 ActionBar
- ”共享“另一种远程
- 2015-1-31