首页 > 代码库 > 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,然后继续移动循环往复,形成一个死循环简单动画效果