欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android實現(xiàn)今日頭條訂閱頻道效果

 更新時間:2019年01月28日 09:47:11   作者:常利兵  
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)今日頭條訂閱頻道效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android仿今日頭條訂閱頻道,供大家參考,具體內(nèi)容如下

源碼:Android實現(xiàn)今日頭條訂閱頻道

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.a2_.MainActivity">

<TextView
  android:background="@android:color/holo_blue_dark"
  android:gravity="center_horizontal"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="已訂閱頻道" />

<com.example.a2_.MyGridLayout
  android:id="@+id/gl1"
  android:columnCount="4"
  android:layout_gravity="center_horizontal"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
</com.example.a2_.MyGridLayout>

<TextView
  android:gravity="center_horizontal"
  android:background="@android:color/darker_gray"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:text="未訂閱頻道" />

<com.example.a2_.MyGridLayout
  android:columnCount="4"
  android:id="@+id/gl2"
  android:layout_gravity="center_horizontal"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
</com.example.a2_.MyGridLayout>
</LinearLayout>

shape文件和選擇器

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp"/>
<stroke android:color="#000"
  android:width="1dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp"/>
<stroke android:color="#ff0000"
  android:dashGap="1dp"
  android:dashWidth="3dp"
  android:width="1dp"/>
</shape>

自定義布局

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<Rect> rects;
private View DragItem = null;
private boolean dragable;

public MyGridLayout(Context context, AttributeSet attrs) {
  super(context, attrs);
  //添加動畫
  setLayoutTransition(new LayoutTransition());
  //艦艇拖拽事件
  setOnDragListener(this);
}

//根據(jù)傳遞進(jìn)來的數(shù)據(jù),動態(tài)地添加控件
public void setData(List<String> 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);
  //設(shè)置背景
  textView.setBackgroundResource(R.drawable.selector_item_bg);
  textView.setTextSize(25);
  //將控件添加到頁面中
  addView(textView);

  LayoutParams layoutParams = (LayoutParams) textView.getLayoutParams();
  //設(shè)置外邊距
  layoutParams.setMargins(5, 5, 5, 5);

  //監(jiān)聽textview點擊事件
  textView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {

      if (listener != null) {
        listener.onItemClick(v);
      }
    }
  });

  //監(jiān)聽控件的長按事件
  textView.setOnLongClickListener(new OnLongClickListener() {

    @Override
    public boolean onLongClick(View v) {

      if (!dragable) {
        return true;
      }
      //把當(dāng)前長按的控件變紅,并且有虛線
      v.setBackgroundResource(R.drawable.selector_item_red_bg);
      //開始拖拽控件
      v.startDrag(null, new DragShadowBuilder(v), null, 0);
      DragItem = v;
      //獲取所有空間的矩形區(qū)域
      getAllRect();

      return true;
    }
  });
}

//獲取所有的矩形區(qū)域
private void getAllRect() {
  rects = new ArrayList<>();
  for (int i = 0; i < getChildCount(); i++) {
    View view = getChildAt(i);
    //獲取每個控件的坐標(biāo)點,并存在集合中
    rects.add(new Rect(view.getLeft(), view.getTop(), view.getRight(), view.getBottom()));
  }
}

public void setOnClickListener(OnItemClickListener listener) {
  this.listener = listener;
}

@Override
public 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");
      //拖拽移動時,位置發(fā)生變化
      //根據(jù)當(dāng)前的位置,判斷應(yīng)該插入到哪個位置
      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++) {
    //如果鼠標(biāo)當(dāng)前的坐標(biāo)包含在某個控件的坐標(biāo)內(nèi)部,那就說明,當(dāng)前在該空間內(nèi)部
    if (rects.get(i).contains((int) event.getX(), (int) event.getY())) {
      return i;
    }
  }
  return -1;
}

public interface OnItemClickListener {
  void onItemClick(View v);
}

// 設(shè)置控件是否可以拖拽
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;
//創(chuàng)建已訂閱和為訂閱的集合
private List<String> select = Arrays.asList("北京", "中國", "國際", "體育", "生活", "旅游", "科技", "軍事", "時尚", "財經(jīng)", "育兒", "汽車");
private List<String> unselect = Arrays.asList("娛樂", "服飾", "音樂", "視頻", "段子", "搞笑", "科學(xué)", "房產(chǎn)", "名站");

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ButterKnife.inject(this);

  //初始化數(shù)據(jù)
  initData();
}


private void initData() {

  gl1.setData(select);
  gl2.setData(unselect);

  gl1.setDragable(true);

  //設(shè)置監(jiān)聽
  gl1.setOnClickListener(new MyGridLayout.OnItemClickListener() {
    @Override
    public void onItemClick(View v) {
      gl1.removeView(v);
      //設(shè)置中間人
      String s = ((TextView) v).getText().toString();
      gl2.addItem(s);
    }
  });

  gl2.setOnClickListener(new MyGridLayout.OnItemClickListener() {
    @Override
    public void onItemClick(View v) {
      gl2.removeView(v);
      //設(shè)置中間人
      String s = ((TextView) v).getText().toString();
      gl1.addItem(s);
    }
  });
}

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kotlin比較與解釋Lazy與Lateinit的用法

    Kotlin比較與解釋Lazy與Lateinit的用法

    在使用kotlin開發(fā)中,因為各種原因,我們會經(jīng)常需要使用到延遲加載的功能,目前kotlin的延遲加載主要有兩種:lateinit和lazy,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值
    2023-02-02
  • 利用MVC編寫廣告條輪播效果

    利用MVC編寫廣告條輪播效果

    這篇文章主要為大家詳細(xì)介紹了利用MVC編寫廣告條輪播效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android DrawerLayout帶有側(cè)滑功能的布局類(1)

    Android DrawerLayout帶有側(cè)滑功能的布局類(1)

    這篇文章主要為大家詳細(xì)介紹了Android DrawerLayout帶有側(cè)滑功能的布局類,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 使用android studio導(dǎo)入模塊的兩種方法(超詳細(xì))

    使用android studio導(dǎo)入模塊的兩種方法(超詳細(xì))

    這篇文章主要介紹了使用android studio導(dǎo)入模塊的兩種方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Android為Tiny4412設(shè)備驅(qū)動在proc目錄下添加一個可讀版本信息的文件

    Android為Tiny4412設(shè)備驅(qū)動在proc目錄下添加一個可讀版本信息的文件

    今天小編就為大家分享一篇關(guān)于Android為Tiny4412設(shè)備驅(qū)動在proc目錄下添加一個可讀版本信息的文件,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Flutter 給列表增加下拉刷新和上滑加載更多功能

    Flutter 給列表增加下拉刷新和上滑加載更多功能

    在實際的 App 中,下拉刷新和上滑加載更多是非常常見的交互形式。在 Flutter 中,有 flutter_easyrefresh開源插件用于實現(xiàn)下拉刷新和上滑加載更多。本篇介紹了有狀態(tài)組件和 flutter_easyrefresh 的基本應(yīng)用,同時使用模擬的方式完成了異步數(shù)據(jù)加載。
    2021-05-05
  • ANDROID中自定義對話框AlertDialog使用示例

    ANDROID中自定義對話框AlertDialog使用示例

    這篇文章主要為大家詳細(xì)介紹了Android中自定義對話框AlertDialog使用示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android自動攔截與接聽功能APK黑白名單

    Android自動攔截與接聽功能APK黑白名單

    大家好,本篇文章主要講的是Android自動攔截與接聽功能APK黑白名單,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12
  • Android通過實現(xiàn)GridView的橫向滾動實現(xiàn)仿京東秒殺效果

    Android通過實現(xiàn)GridView的橫向滾動實現(xiàn)仿京東秒殺效果

    這篇文章主要介紹了Android通過實現(xiàn)GridView的橫向滾動實現(xiàn)仿京東秒殺效果,實現(xiàn)代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • Android懸浮窗的實現(xiàn)(易錯點)

    Android懸浮窗的實現(xiàn)(易錯點)

    現(xiàn)在很多應(yīng)用都使用到懸浮窗,例如微信在視頻的時候,點擊Home鍵,視頻小窗口仍然會在屏幕上顯示。下面小編來實現(xiàn)一下android 懸浮窗,感興趣的朋友跟隨小編一起看看吧
    2019-10-10

最新評論