国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現仿網易今日頭條等自定義頻道listview 或者grideview等item上移到另一個view中

2020-01-02 07:02:15
字體:
來源:轉載
供稿:網友

我這里只是簡單的用了兩個listview來實現的,先上效果圖。比較粗糙。預留了自定義的空間。

思路:

從上圖應該可以看的出來。就是上下兩個listview。點擊下面的ltem。會動態的移動到上一個listview的最后。上面的listview 為listview1,下面的為listview2. 點擊listview2,獲取到view ,設置一個動畫,移動到listview1 ,listview2中刪除被點的item。listview1中新增一個。

上代碼:

Mainactivity.java 部分

package com.example.testlistanimator;import java.util.ArrayList;import java.util.List;import android.animation.Animator;import android.animation.Animator.AnimatorListener;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.annotation.SuppressLint;import android.annotation.TargetApi;import android.app.Activity;import android.graphics.Bitmap;import android.os.Build;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.AnimationSet;import android.view.animation.TranslateAnimation;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;@SuppressLint("NewApi")@TargetApi(Build.VERSION_CODES.HONEYCOMB)public class MainActivity extends Activity {// ListView1private ListView mLv1 = null;// ListView2private ListView mLv2 = null;// list1的adapterprivate LsAdapter1 mAdapter1 = null;// list2的adapterprivate LsAdapter2 mAdapter2 = null;// 支持的刷卡頭String[] arrSupportShua = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六","星期天"};List<String> mList1 = new ArrayList<String>();List<String> mList2 = new ArrayList<String>();/** 是否在移動,由于這邊是動畫結束后才進行的數據更替,設置這個限制為了避免操作太頻繁造成的數據錯亂。 */boolean isMove = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();initListener();}private void initView() {mLv1 = (ListView) findViewById(R.id.list1);mLv2 = (ListView) findViewById(R.id.list2);}private void makeList() {for (String shua : arrSupportShua) {mList2.add(shua);}}private void initData() {makeList();mAdapter1 = new LsAdapter1(MainActivity.this, mList1);mAdapter2 = new LsAdapter2(MainActivity.this, mList2);mLv1.setAdapter(mAdapter1);mLv2.setAdapter(mAdapter2);}private void initListener() {mLv1.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View view, final int location, long arg3) {//如果點擊的時候,之前動畫還沒結束,那么就讓點擊事件無效if(isMove){return;}final ImageView img = getView(view);TextView mtv = (TextView) view.findViewById(R.id.item_tv);final int[] startLocation = new int[2];mtv.getLocationInWindow(startLocation);final String mShua = mList1.get(location);mAdapter2.setVisible(false);mAdapter2.addItem(mShua);new Handler().postDelayed(new Runnable() {public void run() {try {int[] endLocation = new int[2];// 獲取終點的坐標mLv2.getChildAt(mLv2.getLastVisiblePosition()).getLocationInWindow(endLocation);MoveAnim(img, startLocation, endLocation, mShua, 1);mAdapter1.setRemove(location);} catch (Exception localException) {}}}, 50L);}});mLv2.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View view, final int location, long arg3) {//如果點擊的時候,之前動畫還沒結束,那么就讓點擊事件無效if(isMove){return;}final ImageView img = getView(view);TextView mtv = (TextView) view.findViewById(R.id.item_tv);final int[] startLocation = new int[2];mtv.getLocationInWindow(startLocation);final String mShua = mList2.get(location);mAdapter1.setVisible(false);mAdapter1.addItem(mShua);new Handler().postDelayed(new Runnable() {public void run() {try {int[] endLocation = new int[2];// 獲取終點的坐標mLv1.getChildAt(mLv1.getLastVisiblePosition()).getLocationInWindow(endLocation);MoveAnim(img, startLocation, endLocation, mShua, 2);mAdapter2.setRemove(location);} catch (Exception localException) {}}}, 50L);}});}private void MoveAnim(ImageView moveView, int[] startLocation, int[] endLocation, String mShua, final int code) {int[] initLocation = new int[2];// 獲取傳遞過來的VIEW的坐標moveView.getLocationInWindow(initLocation);// 得到要移動的VIEW,并放入對應的容器中final ViewGroup moveViewGroup = getMoveViewGroup();final View mMoveView = getMoveView(moveViewGroup, moveView, initLocation);//使用ObjectAnimator動畫ObjectAnimator mAnimator = ObjectAnimator.ofFloat(mMoveView, "translationY", startLocation[1],endLocation[1]);mAnimator.setDuration(300);mAnimator.start();isMove = true;mAnimator.addListener(new AnimatorListener() {@Overridepublic void onAnimationStart(Animator animation) {isMove = true;}@Overridepublic void onAnimationRepeat(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {moveViewGroup.removeView(mMoveView);if(code==1){mAdapter2.setVisible(true);mAdapter2.notifyDataSetChanged();mAdapter1.remove();isMove = false;}else{mAdapter1.setVisible(true);mAdapter1.notifyDataSetChanged();mAdapter2.remove();isMove = false;}}@Overridepublic void onAnimationCancel(Animator animation) {}});//使用TranslateAnimation。上面部分可以用這部分替換/* // 創建移動動畫TranslateAnimation moveAnimation = new TranslateAnimation(startLocation[0], endLocation[0], startLocation[1],endLocation[1]);moveAnimation.setDuration(300L);// 動畫時間// 動畫配置AnimationSet moveAnimationSet = new AnimationSet(true);moveAnimationSet.setFillAfter(false);// 動畫效果執行完畢后,View對象不保留在終止的位置moveAnimationSet.addAnimation(moveAnimation);mMoveView.startAnimation(moveAnimationSet);moveAnimationSet.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {isMove = true;}@Overridepublic void onAnimationRepeat(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {moveViewGroup.removeView(mMoveView);// instanceof 方法判斷2邊實例是不是一樣,判斷點擊的是DragGrid還是OtherGridViewif(code==1){mAdapter2.setVisible(true);mAdapter2.notifyDataSetChanged();mAdapter1.remove();isMove = false;}else{mAdapter1.setVisible(true);mAdapter1.notifyDataSetChanged();mAdapter2.remove();isMove = false;}}});*/}/*** 創建移動的ITEM對應的ViewGroup布局容器*/private ViewGroup getMoveViewGroup() {ViewGroup moveViewGroup = (ViewGroup) getWindow().getDecorView();LinearLayout moveLinearLayout = new LinearLayout(this);moveLinearLayout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));moveViewGroup.addView(moveLinearLayout);return moveLinearLayout;}/*** 獲取點擊的Item的對應View,* * @param view* @return*/private ImageView getView(View view) {view.destroyDrawingCache();view.setDrawingCacheEnabled(true);Bitmap cache = Bitmap.createBitmap(view.getDrawingCache());view.setDrawingCacheEnabled(false);ImageView iv = new ImageView(this);iv.setImageBitmap(cache);return iv;}/*** 獲取移動的VIEW,放入對應ViewGroup布局容器* * @param viewGroup* @param view* @param initLocation* @return*/private View getMoveView(ViewGroup viewGroup, View view, int[] initLocation) {int x = initLocation[0];int y = initLocation[1];viewGroup.addView(view);LinearLayout.LayoutParams mLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);mLayoutParams.leftMargin = x;mLayoutParams.topMargin = y;view.setLayoutParams(mLayoutParams);return view;}}

兩個adapter部分。兩個差不都。傳一個

package com.example.testlistanimator;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class LsAdapter1 extends BaseAdapter {private Context mContext;private List<String> mList;private LayoutInflater mInflater = null;private boolean isVisible = true;/** 要刪除的position */public int remove_position = -1;private int[] bg = {R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5,R.drawable.a6,R.drawable.a7};public LsAdapter1(Context mContext, List<String> mList) {this.mContext = mContext;this.mList = mList;mInflater = LayoutInflater.from(mContext);}@Overridepublic int getCount() {if (mList != null)return mList.size();return 0;}@Overridepublic Object getItem(int position) {if (mList != null)return mList.get(position);return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = mInflater.inflate(R.layout.list_item, null);TextView tv = (TextView) view.findViewById(R.id.item_tv);tv.setBackgroundResource(bg[position]);tv.setText(mList.get(position));if (!isVisible && (position == -1 + mList.size())) {tv.setText("");}if (remove_position == position) {tv.setText("");}return view;}public void addItem(String mShua) {mList.add(mShua);notifyDataSetChanged();}public void setVisible(boolean isVisible) {this.isVisible = isVisible;}/** 設置刪除的position */public void setRemove(int position) {remove_position = position;notifyDataSetChanged();}/** 刪除頻道列表 */public void remove() {// System.out.println("list1="+mList.size()+" remove_position ="+remove_position);if(remove_position>=0||remove_position<mList.size())mList.remove(remove_position);remove_position = -1;notifyDataSetChanged();}}

以上內容是小編給大家介紹的Android實現仿網易今日頭條等自定義頻道listview 或者grideview等item上移到另一個view中的全部知識,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特前旗| 建宁县| 新源县| 盐亭县| 金溪县| 宿松县| 赤壁市| 房山区| 大英县| 靖宇县| 会昌县| 曲沃县| 崇义县| 阜南县| 象山县| 本溪市| 曲阜市| 汨罗市| 潢川县| 饶河县| 同心县| 谷城县| 昔阳县| 平武县| 比如县| 正定县| 资溪县| 井研县| 岑巩县| 高阳县| 广平县| 平罗县| 宁河县| 阿图什市| 增城市| 巴林右旗| 镇远县| 五常市| 武陟县| 凤庆县| 黄陵县|