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 ------ ...
随机推荐
- 什么是WebPack,为什么要使用它?
1.什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等) ...
- 微信小程序之基础简介
创建小程序项目后进入编辑环境中会有以下的初始配置文件: 文件夹: 1.pages(存放小程序的页面) 1.index 2.logs (页面里的js文件 以Page()方法开头 所有参数对象都存放在其里 ...
- [译]为什么我要离开gulp和grunt转投npm脚本的怀抱
原文链接:https://medium.freecodecamp.com/why-i-left-gulp-and-grunt-for-npm-scripts-3d6853dd22b8#.n7m1855 ...
- iOS通知的整理笔记
iOS通知用于高耦合界面的传值确实方便快捷. 需要实现模态弹出的视图控制器上,有一个视图控制器可以导航.这必定要将这个视图控制器的导航视图控制器naVC.view添加到模态弹出的视图控制器presen ...
- ActionBar设置自定义setCustomView()留有空白的问题
先来看问题,当我使用ActionBar的时候,设置setCustomView时,会留有空白的处理 网上很多朋友说可以修改V7包到19,结果处理的效果也是不理想的. 下面贴出我觉得靠谱的处理代码 pub ...
- 转载:android自定义view实战(温度控制表)!
效果图 package cn.ljuns.temperature.view; import com.example.mvp.R; import android.content.Context;impo ...
- gulp入门小记
由于我所在的项目组一直在用gulp构建工具,而我只是在前人搭好的环境下每次运行gulp packJs来打包js,对里面的东西全然不知,刚好最近有些时间就想自己从学学将gulp怎么用于构建前端项目中,这 ...
- Scala 数据类型(二)
Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型: Byte8位有符号补码整数.数值区间为 -128 到 127 Short16位有符号补码整数.数值区间为 -327 ...
- 使用Logstash进行日志分析
LogStash主要用于数据收集和分析方面,配合Elasticsearch,Kibana用起来很方便,安装教程google出来很多. 推荐阅读 Elasticsearch 权威指南 精通 Elasti ...
- 使用shell脚本实现ping对应IP所对应的人名
#!/bin/bash a=(张三 李四 王五 赵六) ..} do . $((${i}+)) >dev/>&;then ))"号"${a[${i}]}&quo ...