Android垂直滾動新聞頭條

最近做項目要用到淘寶首頁頭條的那種滾動似的新聞,看了下網上的方法,大概有兩種,一種是textview的滾動,另外一種是view的滾動,參考https://github.com/sfsheng0322/MarqueeView,加了自己需求的按照滾動view的思路寫了一個,大家可以參考參考;
`package com.lzx.autoverticalviewproject.utils;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ViewFlipper;

import com.lzx.autoverticalviewproject.R;
import com.lzx.autoverticalviewproject.bean.AutoVerticalViewDataData;

import java.util.List;

/**
* Created by Administrator on 2017/4/7.
*/

public class AutoVerticalViewView extends ViewFlipper {
private Context mContext;
/*是否開啓動畫/
private boolean isSetAnimDuration = false;
/*時間間隔/
private int interval = 3000;
/*動畫時間 /
private int animDuration = 500;

public AutoVerticalViewView(Context context) {
    super(context);
    init(context, null, 0);
}
public AutoVerticalViewView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context, attrs, 0);
}

private void init(Context context, AttributeSet attrs, int defStyleAttr) {
    this.mContext = context;
    setFlipInterval(interval);
    Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in);
    if (isSetAnimDuration) animIn.setDuration(animDuration);
    setInAnimation(animIn);
    Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out);
    if (isSetAnimDuration) animOut.setDuration(animDuration);
    setOutAnimation(animOut);
}
/**
 * 設置循環滾動的View數組
 * @param
 */
public void setViews(final List<AutoVerticalViewDataData> datas) {
    if (datas == null || datas.size() == 0) return;
    removeAllViews();
    int size = datas.size();
    for (int i = 0; i < size; i += 2) {
        final int position = i;
        //根佈局
        LinearLayout item = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.item_view, null);
        //設置監聽
        item.findViewById(R.id.rl).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemClick(position);
                }
            }
        });

        //控件賦值
        ((TextView) item.findViewById(R.id.tv1)).setText(datas.get(position).getValue());
        ((TextView) item.findViewById(R.id.title_tv1)).setText(datas.get(position).getTitle());
        //當數據是奇數時,最後那個item僅有一項
        if (position + 1 < size) {
            item.findViewById(R.id.rl2).setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClick(position+1);
                    }
                }
            });
            ((TextView) item.findViewById(R.id.tv2)).setText(datas.get(position + 1).getValue());
            ((TextView) item.findViewById(R.id.title_tv2)).setText(datas.get(position + 1).getTitle());
        } else item.findViewById(R.id.rl2).setVisibility(View.GONE);
        addView(item);
    }
    startFlipping();
}



private OnItemClickListener onItemClickListener;

/**
 * 設置監聽接口
 *
 * @param onItemClickListener
 */
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
    this.onItemClickListener = onItemClickListener;
}

/**
 * item_view的接口
 */
public interface OnItemClickListener {
    void onItemClick(int position);
}

}`
工具類:

package com.lzx.autoverticalviewproject.bean;

/**
 * Created by Administrator on 2017/4/7.
 */

public class AutoVerticalViewDataData {
    private String title;
    private String value;
    private String url;
    public AutoVerticalViewDataData(String title, String value, String url) {
        super();
        this.title = title;
        this.value = value;
        this.url = url;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
}

使用

package com.lzx.autoverticalviewproject;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import com.lzx.autoverticalviewproject.bean.AutoVerticalViewDataData;
import com.lzx.autoverticalviewproject.utils.AutoVerticalViewView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private AutoVerticalViewView autoVerticalViewView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        autoVerticalViewView = (AutoVerticalViewView) findViewById(R.id.tb);
        final List<AutoVerticalViewDataData> data = new ArrayList<AutoVerticalViewDataData>();
        data.add(new AutoVerticalViewDataData("瘋傳", "不動產統一登記年底全國聯網 可以“以人查房”嗎?", "1"));
        data.add(new AutoVerticalViewDataData("頭條", "男科醫院聘美女主播直播招攬病人 當地介入調查", "2"));
        data.add(new AutoVerticalViewDataData("熱議", "年輕人專屬 15萬內高人氣兩廂家用車推薦", "3"));
        data.add(new AutoVerticalViewDataData("哈哈", "韓檢方第4次看守所中訊問朴槿惠 集中調查受賄嫌疑,韓檢方第4次看守所中訊問朴槿惠 集中調查受賄嫌疑韓檢方第4次看守所中訊問朴槿惠 集中調查受賄嫌疑", "4"));
        data.add(new AutoVerticalViewDataData("呵呵", "特朗普任內對朝採取軍事行動? 美或爲此付出代價", "5"));
        autoVerticalViewView.setViews(data);
        autoVerticalViewView.setOnItemClickListener(new AutoVerticalViewView.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                Toast.makeText(MainActivity.this, "你點擊了" + data.get(position).getValue(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

佈局
新建item_view.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">

    <RelativeLayout
        android:id="@+id/rl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/title_tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="熱議"
            android:textSize="9sp"
            android:padding="3dp"
            android:background="@drawable/textview_border"
            android:layout_marginRight="6dp"
            android:textColor="@color/red" />

        <TextView
            android:id="@+id/tv1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/title_tv1"
            android:ellipsize="end"
            android:textSize="14sp"
            android:maxLines="1" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl2"
        android:layout_width="match_parent"
        android:layout_marginTop="5dp"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/title_tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="熱評"
            android:padding="3dp"
            android:textSize="9sp"
            android:background="@drawable/textview_border"
            android:layout_marginRight="6dp"
            android:textColor="@color/red" />

        <TextView
            android:id="@+id/tv2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/title_tv2"
            android:ellipsize="end"
            android:textSize="14sp"
            android:maxLines="1" />
    </RelativeLayout>

</LinearLayout>

使用

<?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:background="@android:color/white"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:layout_centerVertical="true"
    android:paddingLeft="15dp"
    android:paddingRight="15dp">

    <com.lzx.autoverticalviewproject.utils.AutoVerticalViewView
        android:id="@+id/tb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:gravity="center_vertical"/>



</LinearLayout>

github地址:https://github.com/Echoleezx2016/AutoVerticalViewProject
可以添加依賴直接用;
效果展示
效果展示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章