Android 轮换控件
首先是控件轮换
一.创建主布局
1.用到的控件是 TextSwitcher (文本轮换)
那么其他对应的也就是 ImageSwitcher (图片轮换)
<LinearLayout xmlns: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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.yuxuan.lunhuan.activity.MainActivity" > <TextSwitcher
android:id="@+id/textSwitcher1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#440000ff" > </TextSwitcher> <ImageSwitcher
android:id="@+id/imageSwitcher1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#44ff0000" > </ImageSwitcher> </LinearLayout>
activity_main.xml
二.主要代码
1.声明一下控件 TextSwitcher
private TextSwitcher textSwitcher1;
2.定义一个String类型的数组用来做数据
private String[] strs = new String[] { "1", "2", "3" };
3.创建一个int型的变量用来记录下标
private int index = 0;
4.创建两个int型的值用来保存下面会用到的触摸事件手机按下和松开的X值
private int startx; private int endx;
5.在初始化事件里开始写代码把!
textSwitcher1 = (TextSwitcher) findViewById(R.id.textSwitcher1);
// 创建工厂 匿名内部类
textSwitcher1.setFactory(new ViewFactory() {
@Override
// 用这个方法创建TextView
public View makeView() {
return new TextView(MainActivity.this);
}
});
// 定义一个动画(可有可无)
TranslateAnimation animation = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
animation.setDuration(1500);
animation.setFillAfter(true);
textSwitcher1.setInAnimation(animation);
textSwitcher1.setText(strs[0]);
textSwitcher1.setOnTouchListener(new OnTouchListener() {
@Override
// 设置触摸事件
public boolean onTouch(View v, MotionEvent event) {
// 按下
if (event.getAction() == MotionEvent.ACTION_DOWN) {
startx = event.getX();
}
// 松开
if (event.getAction() == MotionEvent.ACTION_UP) {
endx = event.getX();
// 滑动一定距离才执行
if (startx - endx > 100) {
// 判断下标
if (index == strs.length) {
index = 0;
}
// 设置文本 下标加1
textSwitcher1.setText(strs[index]);
index = index + 1;
}
}
return true;
}
});
然后是图片轮换 其实大致上是一样的 直接上代码
首先在主布局文件中添加一个 ImageSwitcher 控件
然后进入代码编写
1.声明一下控件 ImageSwitcher
private ImageSwitcher imageSwitcher1;
2.定义一个int类型的数组用来保存所需图片的ID
private int[] imgs = new int[] { android.R.drawable.alert_dark_frame,
android.R.drawable.arrow_down_float,
android.R.drawable.btn_dropdown, };
3.创建一个int型的变量用来记录下标 (同上)
4.创建两个int型的值用来保存下面会用到的触摸事件手机按下和松开的X值 (同上)
5.在初始化事件里开始写代码把!
imageSwitcher1 = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
imageSwitcher1.setFactory(new ViewFactory() {
@Override
// 创建 ImageView 这里我们需要处理一下背景
public View makeView() {
ImageView lv = new ImageView(MainActivity.this);
lv.setBackgroundColor(Color.RED);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_VERTICAL;
lv.setLayoutParams(params);
return lv;
}
});
TranslateAnimation inanimation = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_SELF,
0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
inanimation.setDuration(1500);
inanimation.setFillAfter(true);
imageSwitcher1.setInAnimation(inanimation);
imageSwitcher1.setImageResource(imgs[index]);
imageSwitcher1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
startx = event.getX();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
endx = event.getX();
if (startx - endx > 100) {
if (index == strs.length) {
index = 0;
}
imageSwitcher1.setImageResource(imgs[index]);
index = index + 1;
}
}
return true;
}
});
最后写一写页面间的轮换
首先放上主布局代码
<LinearLayout xmlns: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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.yuxuan.lunhuanym.MainActivity" > // 这里用的是用的是 android-support-v4 里面的控件 详情可以百度
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager> </LinearLayout>
activity_main.xml
下面的直接附上主代码
package com.yuxuan.lunhuanym; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup; public class MainActivity extends Activity { private ViewPager pager; private int[] pagids = new int[] { R.layout.activity_view1,
R.layout.activity_view2, R.layout.activity_view3, }; private PagerAdapter adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
} private void initView() {
setContentView(R.layout.activity_main); pager = (ViewPager) findViewById(R.id.vp); adapter = new MyPageAdapter(); pager.setAdapter(adapter);
} // 自定义适配器
private class MyPageAdapter extends PagerAdapter { private List<View> vs; public MyPageAdapter() {
vs = new ArrayList<View>();
for (int i = 0; i < pagids.length; i++) {
View view = View.inflate(MainActivity.this, pagids[i], null);
vs.add(view);
}
} @Override
// 要轮放的页面总共有多少
public int getCount() { return pagids.length;
} @Override
public boolean isViewFromObject(View view, Object object) { return view == object;
} @Override
// 初始化一个条目
// container viewpager 本身
// position 马上出来的试图
public Object instantiateItem(ViewGroup container, int position) { container.addView(vs.get(position)); return vs.get(position);
} @Override
// 销毁一个条目
// container 容器本身
// position 销毁的下标
// object 销毁的page
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
} }
}
感觉稍微牛逼点的控件都和适配器有关 有木有~
Android 轮换控件的更多相关文章
- android 基础控件(EditView、SeekBar等)的属性及使用方法
android提供了大量的UI控件,本文将介绍TextView.ImageView.Button.EditView.ProgressBar.SeekBar.ScrollView.WebView ...
- Android基本控件之Menus
在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...
- Android:控件布局(相对布局)RelativeLayout
RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above-- ...
- Android:控件布局(线性布局)LinearLayout
LinearLayout是线性布局控件:要么横向排布,要么竖向排布 决定性属性:必须有的! android:orientation:vertical (垂直方向) .horizontal(水平方向) ...
- 矩阵, 矩阵 , Android基础控件之ImageView
天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原 ...
- Android给控件添加触摸回调
Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...
- Android 基本控件相关知识整理
Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...
- Github上star数超1000的Android列表控件
Android开发中,列表估计是最最常使用到的控件之一了.列表相关的交互如下拉刷新,上拉更多,滑动菜单,拖动排序,滑动菜单,sticky header分组,FAB等等都是十分常见的体验.Github中 ...
- Android:控件布局(相对布局)RelativeLayout(转)
相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above----------位于给定DI控件之上android:layout_below ------ ...
随机推荐
- Regular Express正则表达式基础
一. 创建一个正则表达式RegExp,有两种方式如下图所示 二. 创建一个正则表达式RegExp详述说明 1.构造函数 //RegExp 是js中一个内置的对象,是正则表达式的缩写 var reg = ...
- CSS3之3d变换与关键帧
3d变换是在transform基础上实现的 transform-style:preserve-3d; 建立3d空间 perspective:; 景深(设置用户看的距离) perspective-ori ...
- js几种生成随机颜色方法
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- xampp与Hbuilder、phpstorm配置
1.xampp的安装就不用多说了,安装完按之后出现这个界面. 2.点击中间那个按钮,运行三个选项,全部正常之后是这样的,这样xampp就不用管了,但是要记下安装的路径,之后需要用 3.首先说Hbuil ...
- 一步步实现ABAP后台导入EXCEL到数据库【2】
前文:http://www.cnblogs.com/hhelibeb/p/5912330.html 既然后台作业只能在应用服务器运行,那么,我们可以先将要上传的数据保存在应用服务器中,之后再以后台作业 ...
- RecyclerView 的介绍以及多布局的实例
RecyclerView 的使用以及多布局的实例 RecyclerView 是在Android5.0之后推出的,是一个比ListView更加灵活更加高效的适配器类型控件.但是RecyclerView不 ...
- WereWolf项目 Postmortem
WereWolf项目 Postmortem (博客园的MarkDown编辑器好像有些问题,编号都显示1..) 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...
- 利用sphinx为python项目生成API文档
sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...
- python脚本后台运行
问题描述: 环境: CentOS6.4 一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本: python t ...
- ajax 同步和异步
ajax请求中同步是要等待请求结果返回后才能继续执行,而异步请求则不需要等待返回结果,可以直接进行后面语句.