android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
主类:IndexAnimationLinearLayout.java
package com.yw.sortlistview; import java.util.ArrayList;
import java.util.List; import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout; import com.yw.sortlistview.bean.AnimationBean; /**
* 移动动画
*
* @author tony
*
*/
@SuppressLint("NewApi")
public class IndexAnimationLinearLayout extends LinearLayout {
// 外层循环
private boolean flag = true;
// 内层if
private boolean flagIf = true;
private Context context;
private List<AnimationBean> datas = new ArrayList<AnimationBean>();
public IndexAnimationLinearLayout(Context context) {
super(context);
this.context = context;
} public IndexAnimationLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
} public IndexAnimationLinearLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
}
public void setResource(List<AnimationBean> datas){
this.datas = datas;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); } // 粗略
private int var = 5; /**
* 移动子控件
*/
public void moveChild() {
// 获取布局中的控件个数
int count = this.getChildCount();
View first = this.getChildAt(0);
for (int i = 0; i < count; i++) {
if (first.getRight() <= 0) {
this.removeView(first);
this.addView(first, this.getChildCount());
onStop();
/**
* 控件停止滚动时切换到不同的视图
*/
if (callback != null) {
callback.stop();
}
} else {
/*
* 左、上、右、下 控制上下不变,左右改变
*/
View view = this.getChildAt(i);
view.layout(view.getLeft() - var, view.getTop(),
view.getRight() - var, view.getBottom());
// 如果view不再Layout范围,则移除
Log.e("view.getRight", view.getRight() + "");
Log.e("this.getLeft", this.getLeft() + "");
} }
} public void start(int w) {
//向集合中添加数据
if(datas != null && datas.size()>0){
for(int i=0;i<datas.size();i++){
Log.e("startview", "startview");
ImageView img = (ImageView)LayoutInflater.from(context).inflate(R.layout.item, null);
img.setImageResource(datas.get(i).getResId());
/*img.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));*/
img.setLayoutParams(new LinearLayout.LayoutParams(
w,
w));
Log.e("endview", "endview");
Log.e("resid", datas.get(i).getResId()+"dd");
this.addView(img);
}
}
new Thread() {
public void run() {
try {
while (flag) {
if (flagIf) {
Thread.sleep(200);
handler.sendEmptyMessage(0);
}
} } catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
public void stop() {
flagIf = false;
flag = false;
}
private void onStop() {
// Toast.makeText(context, "暂停三秒试试看", Toast.LENGTH_LONG).show();
new Thread() {
public void run() {
try {
flagIf = false;
Thread.sleep(2000);
flagIf = true;
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
} Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
moveChild();
break;
}
};
};
private MyLinearLayoutCallBack callback; public void setMyLinearLayoutCallBack(MyLinearLayoutCallBack callback) {
this.callback = callback;
} public interface MyLinearLayoutCallBack { public void stop();
}
}
使用类:LayoutAnimationActivity.java
package com.yw.sortlistview; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast; import com.yw.sortlistview.IndexAnimationLinearLayout.MyLinearLayoutCallBack;
import com.yw.sortlistview.bean.AnimationBean; /**
* 控件循环滚动
*
* @author tony
*
*/
public class LayoutAnimationActivity extends Activity implements
MyLinearLayoutCallBack {
private IndexAnimationLinearLayout linear;
private TextView tv_title;
private List<AnimationBean> datas = new ArrayList<AnimationBean>();
private int w = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutanimation_layout);
linear = (IndexAnimationLinearLayout) findViewById(R.id.layoutanimation_linear);
linear.setMyLinearLayoutCallBack(this);
tv_title = (TextView)findViewById(R.id.layoutanimation_tv_title); getScreenHW(this); }
public void getScreenHW(Context context){
WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
int width =display.getWidth();
int height=display.getHeight();
w = (int)width/8;
}
/**
* 开始动画
*/
@Override
protected void onResume() {
super.onResume();
for(int i=0;i<10;i++){
AnimationBean bean = new AnimationBean();
bean.setId(i+"");
bean.setResId(R.drawable.ic_launcher);
datas.add(bean);
}
linear.setResource(datas);
linear.start(w);
}
/**
* 暂停动画
*/
protected void onStop() {
super.onStop();
linear.stop();
}
/**
* 动画停止时的回调函数
*/
@Override
public void stop() {
tv_title.setText("");
Toast.makeText(this, "暂停三秒试试看", Toast.LENGTH_LONG).show();
};
}
在xml中的使用方法:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical" > <com.yw.sortlistview.IndexAnimationLinearLayout
android:id="@+id/layoutanimation_linear"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffff99"
android:orientation="horizontal" > </com.yw.sortlistview.IndexAnimationLinearLayout>
<TextView
android:id="@+id/layoutanimation_tv_title"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="10dp"
android:text="第一个"
/>
</LinearLayout>
结束。
android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果的更多相关文章
- 在Android源码树中添加userspace I2C读写工具(i2c-util)
在Android源码树中添加userspace I2C读写工具(i2c-util) http://blog.csdn.net/21cnbao/article/details/7919055 分类: A ...
- Android源码中添加C可执行程序
在Android源码中添加C/CPP可执行程序一般保存在external目录中 下面是每个文件的内容 ①add.c #include "add.h" int add (int a, ...
- 我的Android进阶之旅------>如何在多个LinearLayout中添加分隔线
如果要适合于所有的Android版本,可以在多个LinearLayout放置用于显示分隔线的View.例如,放一个ImageView组件,然后将其背景设为分隔线的颜色或图像,分隔线View的定义代码如 ...
- 在Android 源码中添加系统服务
Android系统本身提供了很多系统服务,如WindowManagerService,PowerManagerService等.下面描述一下添加一个系统服务的具体步骤. 1.定义自定义系统服务接口 撰 ...
- 如何在多个LinearLayout中添加分隔线
1.可以放置一个ImageView组件,然后将其设为分隔线的颜色或图形.分隔线View的定义代码如下: 2.在Android3.0及以上版本,LinearLayout支持直接显示分隔线. an ...
- Android源码中添加APP
参考罗升阳<Android系统源代码情景分析> 在Android源码中,我们通常把实验性质的Android APP放在packages/experimental目录下.对于一个简单的应用程 ...
- Android的LinearLayout中orientation默认值为什么是HORIZONTAL
在一个偶然(闲着无聊)的过程中,突然非常好奇为什么LinearLayout在不指定排列方向为垂直(VERTICAL)时就得是水平方向(HORIZONTAL)排列的.产生这个疑问的时候脑子里蹦出来的第一 ...
- iOS添加到购物车的简单动画效果
#pragma mark - 添加到购物车的动画效果 // huangyibiao - (void)addAnimatedWithFrame:(CGRect)frame { // 该部分动画 以sel ...
- ios开发之--简单动画效果的添加
记录一个简单的动画效果,自己写的,很简单,仅做记录. 附一个demo的下载地址: https://github.com/hgl753951/hglTest.git 代码如下: 1,准备 BOOL _i ...
随机推荐
- Graphviz的安装 - windows环境下
1. 官网下载 http://www.graphviz.org/ 往下拉,选择这一个 点进去,选择msi文件下载 下载完成之后,直接双击运行即可 安装完成之后要配置环境变量 2. 配置环境变量 将gr ...
- 网络编程学习二(IP与端口)
InetAddress类 封装计算机的ip地址,没有端口 // 使用getLocalHost方法创建InetAddress对象 InetAddress addr = InetAddress.getLo ...
- JqGrid: Add,Edit,Del in asp.net
https://github.com/1rosehip/jplist https://github.com/free-jqgrid/jqGrid https://plugins.jquery.com/ ...
- FHQ Treap小结(神级数据结构!)
首先说一下, 这个东西可以搞一切bst,treap,splay所能搞的东西 pre 今天心血来潮, 想搞一搞平衡树, 先百度了一下平衡树,发现正宗的平衡树写法应该是在二叉查找树的基础上加什么左左左右右 ...
- Bootstrap里的文件分别代表什么意思及其引用方法
关于Bootstrap打包的文件分别代表什么意思,官网也没有给出一个明确的解释,在网上查了一些资料,总价归纳了如下: bootstrap/ <!--主目录--> ├── css/ < ...
- 开发Hexo主题(一)
Hexo是一款静态博客工具,由Node.js编写 在博客根目录的themes下,新建文件夹(文件夹名为主题名) 主题目录结构如图 这里使用模版引擎为Ejs 在Layout目录下新建index.ejs文 ...
- Android学习笔记----天地图API开发之UnsatisfiedLinkError
由于在jniLibs目录下移除了x86的相关so文件,后来又因为需要在PC模拟器上调试,将该文件夹恢复后,增加了天地图的sdk,却忘记将libMapEngine.so文件同时拷贝至x86目录下,导致如 ...
- AJAX的优点 个人理解记录
1:对网站性能的提高.例如我只需要刷新页面中购物车的数据,使用ajax时不需要请求整个页面的数据,对于客户端和服务器的压力都会降低, 减少了ISP的负担,服务器的空间和带宽压力都会降低. 2:用户体验 ...
- sql 语句查询 sqlserver 数据库 MAC 地址
declare @dbid int set @dbid=db_id('dbName') select distinct hostname, db_name(dbid), net_address, lo ...
- Sql 查询结果 根据某个字段值 变更另外一个字段值 case when
SELECT CASE THEN '*******' ELSE Plate END AS Plate, CarType FROM Cars;