Android 中利用ViewFlipper 滑动屏幕切换页面,ListView展示数据

首先新建一个Android项目,命名为ViewFlipperTest

如图:项目机构,本项目主要操作图中红色箭头标注的文件

1.HgroupAdapter.java文件代码↓主要实现listview数据适配器的定义


 1 package com.hll.ViewFlipperTest;
2
3 import java.util.List;
4
5 import android.content.Context;
6 import android.view.LayoutInflater;
7 import android.view.View;
8 import android.view.ViewGroup;
9 import android.widget.BaseAdapter;
10 import android.widget.TextView;
11
12 public class HgroupAdapter extends BaseAdapter {
13 private LayoutInflater mInflater;
14 int state;
15 Context mContext;
16 String mState;
17 List<String> mList;
18 int sel = 0;
19
20 public HgroupAdapter(Context context, List<String> list, int menuState) {
21 this.mList = list;
22 this.mContext = context;
23 this.state = menuState;
24 mInflater = LayoutInflater.from(context);
25 }
26
27 public int getCount() {
28 // if(mList == null){
29 // return 0;
30 // }
31 // return mList.size();
32 return 10;
33 }
34
35 public Object getItem(int position) {
36 return mList.get(position);
37 }
38
39 public long getItemId(int position) {
40 return position;
41 }
42
43 public View getView(int position, View convertView, ViewGroup parent) {
44 final ViewHolder holder;
45 if (convertView == null) {
46 convertView = mInflater.inflate(R.layout.grouplist, null);
47 holder = new ViewHolder();
48 convertView.setTag(holder);
49 } else {
50 holder = (ViewHolder) convertView.getTag();
51 }
52 return convertView;
53 }
54
55 static class ViewHolder {
56 TextView group_name;
57 TextView time;
58 TextView info;
59 }
60 }

2.ViewFlipperTest.java
程序启动的主文件↓


package com.hll.ViewFlipperTest;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;

@SuppressLint("NewApi")
public class ViewFlipperTest extends Activity implements OnTouchListener,
OnGestureListener, OnDoubleTapListener {
private ViewFlipper mFlipper; // 翻转视图
GestureDetector mGestureDetector; // 手势识别
private int mCurrentLayoutState; // 当前布局状态
private static final int FLING_MIN_DISTANCE = 2;
private static final int FLING_MIN_VELOCITY = 200;

TextView counttv;
Button buttonNext1 = null;
Button buttonNext2 = null;

ListView lv1 = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

findView();
setListener();
}

/*
* 查找控件
*/
@SuppressWarnings("deprecation")
public void findView() {
mFlipper = (ViewFlipper) findViewById(R.id.details);
mFlipper.setLongClickable(true);
mGestureDetector = new GestureDetector(this);
mCurrentLayoutState = 0;

counttv = (TextView) findViewById(R.id.counttv);
buttonNext1 = (Button) findViewById(R.id.Button_next1);
buttonNext2 = (Button) findViewById(R.id.Button_next2);
lv1 = (ListView) findViewById(R.id.list1);

lv1.setAdapter(new HgroupAdapter(this, null, 0));
}

public void setListener() {

mFlipper.setOnTouchListener(this);
lv1.setOnTouchListener(this);
counttv.setText("9");
buttonNext1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
mFlipper.showNext();
counttv.setText("7");
}
});
buttonNext2.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
mFlipper.showNext();
counttv.setText("8");
}

});
}

//
protected Animation inFromRightAnimation() {
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, +1f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromRight.setDuration(300);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}

protected Animation outToLeftAnimation() {
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, -1f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoLeft.setDuration(300);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}

protected Animation inFromLeftAnimation() {
Animation inFromLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromLeft.setDuration(300);
inFromLeft.setInterpolator(new AccelerateInterpolator());
return inFromLeft;
}

protected Animation outToRightAnimation() {
Animation outtoRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoRight.setDuration(300);
outtoRight.setInterpolator(new AccelerateInterpolator());
return outtoRight;
}

public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {

mFlipper.setInAnimation(inFromRightAnimation());
mFlipper.setOutAnimation(outToLeftAnimation());
mFlipper.showNext();
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {

mFlipper.setInAnimation(inFromLeftAnimation());
mFlipper.setOutAnimation(outToRightAnimation());
mFlipper.showPrevious();
}
return false;
}

public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onLongPress", Toast.LENGTH_LONG)
.show();
}

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
Toast.makeText(getApplicationContext(), "onScroll", Toast.LENGTH_LONG)
.show();
return false;
}

public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onShowPress", Toast.LENGTH_LONG)
.show();
}

public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onSingleTapUp", Toast.LENGTH_LONG)
.show();
return false;
}

public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}

public boolean onDoubleTap(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onDoubleTap", Toast.LENGTH_LONG)
.show();
return false;
}

public boolean onDoubleTapEvent(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}

public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "onSingleTapConfirmed", Toast.LENGTH_LONG)
.show();
return false;
}

}

3. main.xml
程序主界面布局文件↓


 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="fill_parent"
4 android:layout_height="fill_parent"
5 android:background="@drawable/bg"
6 android:orientation="vertical" >
7
8 <FrameLayout
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content"
11 android:layout_gravity="right"
12 android:orientation="vertical" >
13
14 <TextView
15 android:id="@+id/counttv"
16 android:layout_width="50dip"
17 android:layout_height="wrap_content"
18 android:layout_gravity="right"
19 android:background="@drawable/a4" />
20 </FrameLayout>
21
22 <ViewFlipper
23 android:id="@+id/details"
24 android:layout_width="fill_parent"
25 android:layout_height="fill_parent"
26 android:autoStart="false"
27 android:flipInterval="1000"
28 android:inAnimation="@anim/push_left_in"
29 android:outAnimation="@anim/push_left_out"
30 android:persistentDrawingCache="animation" >
31
32 <LinearLayout
33 android:layout_width="fill_parent"
34 android:layout_height="wrap_content"
35 android:orientation="vertical" >
36
37 <Button
38 android:id="@+id/Button_next1"
39 android:layout_width="fill_parent"
40 android:layout_height="wrap_content"
41 android:text="Next1" >
42 </Button>
43
44 <TextView
45 android:id="@+id/info"
46 android:layout_width="wrap_content"
47 android:layout_height="wrap_content"
48 android:layout_marginLeft="10dip"
49 android:singleLine="true"
50 android:text="系统消息"
51 android:textSize="20dip" />
52
53 <ListView
54 android:id="@+id/list1"
55 android:layout_width="fill_parent"
56 android:layout_height="fill_parent"
57 android:cacheColorHint="#00000000"
58 android:divider="@drawable/divider_horizontal_bright" >
59 </ListView>
60 </LinearLayout>
61
62 <LinearLayout
63 android:layout_width="fill_parent"
64 android:layout_height="wrap_content"
65 android:orientation="vertical" >
66
67 <Button
68 android:id="@+id/Button_next2"
69 android:layout_width="fill_parent"
70 android:layout_height="wrap_content"
71 android:text="Next2" >
72 </Button>
73
74 <ImageView
75 android:id="@+id/image2"
76 android:layout_width="fill_parent"
77 android:layout_height="wrap_content"
78 android:src="@drawable/mail3" >
79 </ImageView>
80 </LinearLayout>
81
82 </ViewFlipper>
83 </LinearLayout>

4. grouplist.xml
ListView 列表项模版文件↓


 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 android:layout_width="fill_parent"
5 android:layout_height="wrap_content"
6 android:orientation="vertical"
7 >
8 <LinearLayout
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content"
11 android:orientation="horizontal"
12 >
13 <TextView
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:textSize="18dip"
17 android:singleLine="true"
18 android:layout_marginLeft="10dip"
19 android:text="版本更新"
20 />
21
22 <TextView
23 android:id="@+id/time"
24 android:layout_width="fill_parent"
25 android:layout_height="wrap_content"
26 android:textSize="18dip"
27 android:singleLine="true"
28 android:text="2010-11-01"
29 android:gravity="right"
30 android:layout_marginRight="6dip"
31 />
32
33 </LinearLayout>
34
35 <TextView
36 android:id="@+id/info"
37 android:layout_width="wrap_content"
38 android:layout_height="wrap_content"
39 android:textSize="16dip"
40 android:singleLine="true"
41 android:text="版本更新为2.1.1版本,请及时更新.网址..."
42 android:gravity="right"
43 android:layout_marginLeft="10dip"
44 />
45 </LinearLayout>

5.使用Android模拟器或者连接Android智能手机运行程序,滑动手机屏幕可以看到翻页的效果。

本项目代码源于网络,感谢无私分享的人。

时间: 2024-08-03 06:21:44

Android 中利用ViewFlipper 滑动屏幕切换页面,ListView展示数据的相关文章

Android中使用ViewFlipper实现屏幕切换

屏幕切换指的是在同一个Activity内屏幕间的切换,ViewFlipper继承了Framelayout类,ViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果.如下动图: 该类有如下几个和动画相关的函数: setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation:一个接受两个参数,类型为Context和int,分别为Context对象和定义An

如何在android中利用Theme设置application 的所有listview的style?~

今天看VLC的源代码,发现一个很神奇的东西 所有listview的点击效果背景色都是橘黄色 花了点时间找了一下看看怎么实现的. 首先,定义一个<selector> like this: <selector> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/

Android中使用ViewPager实现屏幕页面切换和页面轮播效果

之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpager有自己的adapter,这也让其适应复杂对象,实现数据的动态加载. ViewPager是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一,利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等. 下面我们就展示下Vie

Android中使用ImageViewSwitcher实现图片切换轮播导航效果

前面写过了使用ViewFlipper和ViewPager实现屏幕中视图切换的效果(未实现轮播)附链接: Android中使用ViewFlipper实现屏幕切换 Android中使用ViewPager实现屏幕页面切换和页面切换效果 今天我们在换一种实现方式ImageViewSwitcher. ImageSwitcher是Android中控制图片展示效果的一个控件,如:幻灯片效果 ImageSwitcher粗略的理解就是ImageView的选择器. ImageSwitcher的原理:ImageSwi

Android中利用命令行进行截屏并导出到电脑上

声明:本博客为原创博客,未经允许,不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/27819525 大多数人最常用的截屏方法可能就是利用手机的快捷按键了,但是那样如果要导入到电脑中效率会比较低.实际上有更好的截屏方式,最简单的当然就是利用Eclipse中的DDMS进行截屏了,点击"Screen Capture"按钮后等待10多秒,然后就可直接利用Save按钮保存到电脑中. 显然,由于要进行图片显示的原因,在DDMS中会

Android中如何让手机屏幕不待机

在Android中,申请WakeLock可以让你的进程持续执行即使手机进入睡眠模式,比较实用的是比如后台有网络功能,可以保证操作持续进行. 方法: 在操作之前加入             PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);             wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Con

Android中利用SharedPreferences保存信息

package com.example.sharepreferen; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.vi

Android中利用Handler实现消息的分发机制(三)

在第二篇文章<Android中利用Handler实现消息的分发机制(一)>中,我们讲到主线程的Looper是Android系统在启动App的时候,已经帮我们创建好了,而如果在子线程中需要去使用Handler的时候,我们就需要显式地去调用Looper的 prepare方法和loop方法,从而为子线程创建其唯一的Looper. 具体代码如下: class LooperThread extends Thread { public Handler mHandler; public void run()

Android中利用OpenMax 编程的基本流程

最近由于公司在做数字电视,播放器和模块由供应商打包一起卖,驱动调通了,可是播放器要硬件解码,和平台差异,原厂又没有相关文档,就自己试着看了一个系统的播放器流程,顺便整理了一下,也方便以后查询,希望对播放器硬解码的开发能起到点作用.由于对视频也不了解,所以难免有不少错误,欢迎高手指导. 1: 由文件或者设备来创建一个dataSource(DataSource) (其中可以是文件描述符fd, uri ,http) 2:  通过dataSource来创建一个MediaExtractor(即视频的分流器