首页 > 代码库 > android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果
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,然后继续移动循环往复,形成一个死循环简单动画效果
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。