本文实例为大家分享了Android仿今日头条订阅频道,供大家参考,具体内容如下

源码:Android实现今日头条订阅频道

布局文件

<?xml version="1.0" encoding="utf-8"?>

shape文件和选择器

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>

自定义布局

package com.example.a2_;import android.animation.LayoutTransition;import android.content.Context;import android.graphics.Color;import android.graphics.Rect;import android.util.AttributeSet;import android.view.DragEvent;import android.view.View;import android.widget.GridLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017.06.08.0008. */public class MyGridLayout extends GridLayout implements View.OnDragListener {private OnItemClickListener listener;private List rects;private View DragItem = null;private boolean dragable;public MyGridLayout(Context context, AttributeSet attrs) {  super(context, attrs);  //添加动画  setLayoutTransition(new LayoutTransition());  //舰艇拖拽事件  setOnDragListener(this);}//根据传递进来的数据,动态地添加控件public void setData(List list) {  for (int i = 0; i < list.size(); i++) {    addItem(list.get(i));  }}public void addItem(String s) {  final TextView textView = new TextView(getContext());  textView.setText(s);  textView.setTextColor(Color.BLACK);  textView.setPadding(15, 5, 15, 5);  //设置背景  textView.setBackgroundResource(R.drawable.selector_item_bg);  textView.setTextSize(25);  //将控件添加到页面中  addView(textView);  LayoutParams layoutParams = (LayoutParams) textView.getLayoutParams();  //设置外边距  layoutParams.setMargins(5, 5, 5, 5);  //监听textview点击事件  textView.setOnClickListener(new OnClickListener() {    @Override    public void onClick(View v) {      if (listener != null) {        listener.onItemClick(v);      }    }  });  //监听控件的长按事件  textView.setOnLongClickListener(new OnLongClickListener() {    @Override    public boolean onLongClick(View v) {      if (!dragable) {        return true;      }      //把当前长按的控件变红,并且有虚线      v.setBackgroundResource(R.drawable.selector_item_red_bg);      //开始拖拽控件      v.startDrag(null, new DragShadowBuilder(v), null, 0);      DragItem = v;      //获取所有空间的矩形区域      getAllRect();      return true;    }  });}//获取所有的矩形区域private void getAllRect() {  rects = new ArrayList<>();  for (int i = 0; i < getChildCount(); i++) {    View view = getChildAt(i);    //获取每个控件的坐标点,并存在集合中    rects.add(new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));  }}public void setOnClickListener(OnItemClickListener listener) {  this.listener = listener;}@Overridepublic boolean onDrag(View v, DragEvent event) {  if (!dragable) {    return true;  }  switch (event.getAction()) {    case DragEvent.ACTION_DRAG_STARTED:      System.out.println("ACTION_DRAG_STARTED");      break;    case DragEvent.ACTION_DRAG_ENTERED:      System.out.println("ACTION_DRAG_ENTERED");      break;    case DragEvent.ACTION_DRAG_EXITED:      System.out.println("ACTION_DRAG_EXITED");      break;    case DragEvent.ACTION_DRAG_LOCATION:      System.out.println("ACTION_DRAG_LOCATION");      //拖拽移动时,位置发生变化      //根据当前的位置,判断应该插入到哪个位置      int dragItemIndex = findDragItem(event);      if (dragItemIndex != -1 && DragItem != null && getChildAt(dragItemIndex) != DragItem) {        //先删除原来的控件        removeView(DragItem);        //吧新的控件拖拽到新的位置        addView(DragItem, dragItemIndex);      }      break;    case DragEvent.ACTION_DROP:      System.out.println("ACTION_DROP");      break;    case DragEvent.ACTION_DRAG_ENDED:      System.out.println("ACTION_DRAG_ENDED");      if (DragItem != null) {        DragItem.setBackgroundResource(R.drawable.selector_item_bg);      }      break;  }  return true;}private int findDragItem(DragEvent event) {  if (rects == null) {    return -1;  }  for (int i = 0; i < rects.size(); i++) {    //如果鼠标当前的坐标包含在某个控件的坐标内部,那就说明,当前在该空间内部    if (rects.get(i).contains((int) event.getX(), (int) event.getY())) {      return i;    }  }  return -1;}public interface OnItemClickListener {  void onItemClick(View v);}// 设置控件是否可以拖拽public void setDragable(boolean dragable) {  this.dragable = dragable;}}

核心代码

package com.example.a2_;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import java.util.Arrays;import java.util.List;import butterknife.ButterKnife;import butterknife.InjectView;public class MainActivity extends Activity {@InjectView(R.id.gl1)MyGridLayout gl1;@InjectView(R.id.gl2)MyGridLayout gl2;@InjectView(R.id.activity_main)LinearLayout activityMain;//创建已订阅和为订阅的集合private List select = Arrays.asList("北京", "中国", "国际", "体育", "生活", "旅游", "科技", "军事", "时尚", "财经", "育儿", "汽车");private List unselect = Arrays.asList("娱乐", "服饰", "音乐", "视频", "段子", "搞笑", "科学", "房产", "名站");@Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  ButterKnife.inject(this);  //初始化数据  initData();}private void initData() {  gl1.setData(select);  gl2.setData(unselect);  gl1.setDragable(true);  //设置监听  gl1.setOnClickListener(new MyGridLayout.OnItemClickListener() {    @Override    public void onItemClick(View v) {      gl1.removeView(v);      //设置中间人      String s = ((TextView) v).getText().toString();      gl2.addItem(s);    }  });  gl2.setOnClickListener(new MyGridLayout.OnItemClickListener() {    @Override    public void onItemClick(View v) {      gl2.removeView(v);      //设置中间人      String s = ((TextView) v).getText().toString();      gl1.addItem(s);    }  });}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. android 边框圆角
  2. android中任何禁止软键盘自动弹出而点击EditText的时候才弹出
  3. Android-Layout布局
  4. Android(安卓)library projects cannot be launched
  5. Android(安卓)P系统设置之默认选择网络类型(4G,3G,2G)
  6. android webview css z-index属性无效
  7. 设置环境变量
  8. 2010.11.16———android Camera 拍照的两个问题
  9. android中自定义控件

随机推荐

  1. 深入讲解Android中Activity launchMode
  2. Android我还可以相信你多少系列文章五之
  3. php与android的简单交互
  4. Android技术博文汇总
  5. Drawable Resources Part I(Drawable 资源
  6. Android的Handler,Looper源码剖析
  7. React Native与Android原生之间的通讯
  8. 使用Eclipse搭建简易Android服务器
  9. Android菜鸟的成长笔记(2)——第一个Androi
  10. Android——View宽高的设置和多种获取宽