Android写动画效果不是一般的麻烦,网上找了好久,终于解决了动画的问题,总结记录以共勉。

仅以水平方向移动效果做说明,垂直方向类似。

public void slideview(final float p1, final float p2) {    TranslateAnimation animation = new TranslateAnimation(p1, p2, 0, 0);    animation.setInterpolator(new OvershootInterpolator());    animation.setDuration(durationMillis);    animation.setStartOffset(delayMillis);    animation.setAnimationListener(new Animation.AnimationListener() {        @Override        public void onAnimationStart(Animation animation) {        }                                                           @Override        public void onAnimationRepeat(Animation animation) {        }                                                           @Override        public void onAnimationEnd(Animation animation) {            int left = view.getLeft()+(int)(p2-p1);            int top = view.getTop();            int width = view.getWidth();            int height = view.getHeight();            view.clearAnimation();            view.layout(left, top, left+width, top+height);        }    });    view.startAnimation(animation);}

上述内容详见:http://www.cnblogs.com/eoiioe/archive/2012/08/29/2662546.html

以下是在项目中的应用实况:

public class WatchTvFragment extends Fragment {    private static View view;    static String TAG = "WatchTvFragment";    TvChannelListFragment channelFragment;    TvProgramListFragment programFragment;    TvCommentListFragment commentFragment;    FragmentManager fragmentMgr;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        if (view != null) {            ViewGroup parent = (ViewGroup) view.getParent();            if (parent != null)                parent.removeView(view);        }        try {            view = inflater.inflate(R.layout.fragment_watchtv, container, false);        } catch (InflateException e) {                                     }        fragmentMgr = getFragmentManager();        channelFragment = (TvChannelListFragment) fragmentMgr.findFragmentById(R.id.channel_list_fragment);        commentFragment = (TvCommentListFragment) fragmentMgr.findFragmentById(R.id.comment_list_fragment);        programFragment = (TvProgramListFragment) fragmentMgr.findFragmentById(R.id.program_list_fragment);        return view;    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        new AsyncTask<Void, Void, Void>() {            @Override            protected Void doInVoid...  params) {                try {                    Thread.sleep(100);                } catch (InterruptedException e) {                    e.printStackTrace();                }                return null;            }            protected void onPostExecute(Void result) {                programFragment.getView().setOnTouchListener(programTouchListener);            }        }.execute();    }    public void slideview(final View view, final float p1, final float p2) {        int durationMillis = 500;        int delayMillis = 0;        TranslateAnimation animation = new TranslateAnimation(p1, p2, 0, 0);        animation.setInterpolator(new OvershootInterpolator());        animation.setDuration(durationMillis);        animation.setStartOffset(delayMillis);        animation.setAnimationListener(new Animation.AnimationListener() {            @Override            public void onAnimationStart(Animation animation) {            }            @Override            public void onAnimationRepeat(Animation animation) {            }            @Override            public void onAnimationEnd(Animation animation) {                int left = view.getLeft() + (int) (p2 - p1);                int top = view.getTop();                int width = view.getWidth();                int height = view.getHeight();                view.clearAnimation();                view.layout(left, top, left + width, top + height);            }        });        view.startAnimation(animation);    }    View.OnTouchListener programTouchListener = new OnProgramTouchListener();    class OnProgramTouchListener implements View.OnTouchListener {        int downX, upX;        boolean bAtStartPosition = true; // 在初始位置        @Override        public boolean onTouch(View v, MotionEvent event) {            View view = programFragment.getView();            int distance = channelFragment.getView().getMeasuredWidth();            if (event.getAction() == MotionEvent.ACTION_DOWN) {                downX = (int) event.getX(); // 取得按下时的坐标x                return true;            } else if (event.getAction() == MotionEvent.ACTION_UP) {                upX = (int) event.getX(); // 取得松开时的坐标x;                if (upX - downX > 100 && !bAtStartPosition) {                    // 往右滑超过一定距离并且不在初始位置                    bAtStartPosition = true;                    slideview(view, 0, distance);                } else if (upX - downX < -100 && bAtStartPosition) {                    // 往左滑超过一定距离并且在初始位置                    bAtStartPosition = false;                    slideview(view, 0, -distance);                }                return true;            } // ACTION_UP                // ACTION_MOVE状态不做任何处理。            return false;        }    }}


更多相关文章

  1. Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
  2. 如何申请 android google map API key
  3. OpenGL ES 纹理过滤模式-glTexParameteri
  4. Android(安卓)更改 Toast 的默认位置及自定义Toast
  5. android locationManager定位
  6. android布局 LinearLayout和RelativeLayout
  7. android中layout区别
  8. Android布局(layout)
  9. Android基于位置的服务LBS

随机推荐

  1. android下发送中文短消息
  2. android在游戏中一直保持屏幕高亮
  3. Android开机自启动程序
  4. android fastboot 使用
  5. Android--Activity的四种启动模式和onNew
  6. Android高手进阶教程(六)之----Android(
  7. android:fitsSystemWindows
  8. android ExpandableListView
  9. framework的调试与编译方法
  10. android 源码编译打包的apk出现accessed