ViewFlipper的使用,显示图片左右滑动效果

系统 1735 0

1.简介

          ViewFlipper extends ViewAnimator,Simple ViewAnimator that will animate between two or more views that have been added to it. Only one child is shown at a time. If requested, can automatically flip between each child at a regular interval。

           简单的ViewAnimator 可以在两个或两个以上的视图间实现动画效果,但是一次只能显示一个子类。如果设置的话,子类可以按照一定规律来显示。

 

2. 具体使用

 边上代码边解释

    <?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" android:background="#ffffff">
<!-- 滑动翻页显示 -->
	<ViewFlipper
		android:orientation="vertical" android:id="@+id/ViewFlipper"
		android:layout_width="fill_parent" android:layout_height="75dip"
		android:background="@drawable/gradient_dark_purple">

		<!-- (0) Loading -->
		<LinearLayout android:orientation="vertical"
			android:layout_width="fill_parent" android:layout_height="fill_parent"
			android:layout_marginLeft="15dip" android:gravity="left|center_vertical">
			<com.teleca.jamendo.widget.ProgressBar
				android:id="@+id/ProgressBar" android:layout_width="wrap_content"
				android:layout_height="wrap_content">
			</com.teleca.jamendo.widget.ProgressBar>
		</LinearLayout>

		<!-- (1) Gallery -->
		<LinearLayout android:orientation="vertical"
			android:layout_width="fill_parent" android:layout_height="fill_parent"
			android:gravity="center">
			<Gallery android:id="@+id/Gallery" android:layout_width="fill_parent"
				android:layout_height="wrap_content" android:spacing="0px" />
		</LinearLayout>

		<!-- (2) Failure -->
		<LinearLayout android:orientation="vertical"
			android:layout_width="fill_parent" android:layout_height="fill_parent"
			android:layout_marginLeft="15dip" android:gravity="left|center_vertical">
			<com.teleca.jamendo.widget.FailureBar
				android:id="@+id/FailureBar" android:layout_width="wrap_content"
				android:layout_height="wrap_content">
			</com.teleca.jamendo.widget.FailureBar>
		</LinearLayout>
	</ViewFlipper>
</LinearLayout>
  

 在viewflipper中有三个线性布局,分别为初始加载和加载后以及加载失败。当我们在activity中这个viewflipper实例化时,我们打印

    mViewFlipper.getDisplayedChild()
  

 

会得到3。说明三个linnerlayout为她的子类。同时为了怕给主线程增加负担,我们采用异步实现。

  

    private class NewsTask extends AsyncTask<Void, WSError, Album[]> {

		@Override
		public void onPreExecute() {
			mViewFlipper.setDisplayedChild(0);
			
			System.out.println("子类数目----"+mViewFlipper.getChildCount()+" "+mViewFlipper.getDisplayedChild());
			
			mProgressBar.setText(R.string.loading_news);
			super.onPreExecute();
		}

		@Override
		public Album[] doInBackground(Void... params) {
			JamendoGet2Api server = new JamendoGet2ApiImpl();
			Album[] albums = null;
			try {
				albums = server.getPopularAlbumsWeek();
			} catch (JSONException e) {
				e.printStackTrace();
			} catch (WSError e){
				publishProgress(e);
			}
			System.out.println("doInBackground"+mViewFlipper.getDisplayedChild());
			return albums;
		}

		@Override
		public void onPostExecute(Album[] albums) {

			if(albums != null && albums.length > 0){
				mViewFlipper.setDisplayedChild(1);
				ImageAdapter albumsAdapter = new ImageAdapter(HomeActivity.this);
				albumsAdapter.setList(albums);
				mGallery.setAdapter(albumsAdapter);
				mGallery.setOnItemClickListener(mGalleryListener);
				mGallery.setSelection(albums.length/2, true); // animate to center

			} else {
				mViewFlipper.setDisplayedChild(2);
				mFailureBar.setOnRetryListener(new OnClickListener(){

					@Override
					public void onClick(View v) {
						new NewsTask().execute((Void)null);
					}

				});
				mFailureBar.setText(R.string.connection_fail);
			}
System.out.println("onPostExecute"+mViewFlipper.getDisplayedChild());
			super.onPostExecute(albums);
		}

  

 

这个类实现了我们的操作。

 在oncreate()中使用

    new NewsTask().execute((Void)null);
  

 

调用异步操作。

接下来,我们只讲解子类1,即加载成功后的显示效果。

如图:


ViewFlipper的使用,显示图片左右滑动效果
 在以上代码中,if(albums != null && albums.length > 0){
mViewFlipper.setDisplayedChild(1);//设置显示第一面即成功加载后的效果
ImageAdapter albumsAdapter = new ImageAdapter(HomeActivity.this);//自定义了一个adpter,来组织显示样式
    albumsAdapter.setList(albums);//将数据放入其中,那么albums 自然是个bean了。里面定义了albums 的各种属性,如发行时间,专辑名等。
    mGallery.setAdapter(albumsAdapter);//给画布设置适配器,使画布显示出效果来。
mGallery.setOnItemClickListener(mGalleryListener);//添加监听,实现对指定专辑的使用
    mGallery.setSelection(albums.length/2, true);} //设置默认显示区域

 

 

ViewFlipper的使用,显示图片左右滑动效果


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论