安卓仿淘宝头条数据上下自动滚动

其实实现逻辑就是一个自定义的view,在加上指定的动画就可以;

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#f1f1f1"
        android:gravity="center_vertical|center_horizontal"
        android:text="PonyProject" />

    <RelativeLayout
        android:id="@+id/noti_real_pre"
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        android:orientation="vertical"
        android:paddingLeft="10dp" >

        <ImageView
            android:id="@+id/adt_type"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginBottom="1px"
            android:layout_marginTop="1px"
            android:clickable="false"
            android:focusable="false"
            android:paddingBottom="2dp"
            android:paddingLeft="@dimen/dp_5"
            android:paddingRight="@dimen/dp_10"
            android:paddingTop="2dp"
            android:src="@drawable/icon_activity" />

        <View
            android:id="@+id/mView"
            android:layout_width="0.5dp"
            android:layout_height="15dp"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@id/adt_type"
            android:background="#e5e5e5"
            android:clickable="false"
            android:focusable="false" >
        </View>

        <com.pony.view.UPMarqueeView
            android:id="@+id/sl_activity"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@id/mView"
            android:clickable="false"
            android:focusable="false" />
    </RelativeLayout>

    <View
        android:layout_width="fill_parent"
        android:layout_height="1px"
        android:background="#cccccc"
        />

</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:orientation="vertical">

    <LinearLayout
        android:id="@+id/rl"
        android:layout_width="match_parent"
        android:gravity="center_vertical"
        android:layout_height="43dp">


        <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:focusable="false"
            android:clickable="false"
            android:textColor="@color/check_more_topic"
            android:textSize="14sp"
            android:maxLines="1" />

        <TextView
                android:layout_width="wrap_content"
                android:layout_toRightOf="@id/sl_activity"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:text="HOT"
                android:focusable="false"
                android:clickable="false"
                android:textSize="10dip"
                android:layout_centerVertical="true"
                android:padding="2dp"
                android:textColor="#ffffff"
                android:background="@drawable/selected_selector"
        />

   </LinearLayout>

</LinearLayout>

自定义view文件:

package com.pony.view;

import java.util.List;

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

import com.pony.R;

/**
 * 仿淘宝首页的 淘宝头条滚动的自定义View
 *
 * Created by mengwei on 2016/7/20.
 */
public class UPMarqueeView extends ViewFlipper {

    private Context mContext;
    private boolean isSetAnimDuration = false;
    private int interval = 3000;
    /**
     * 动画时间
     */
    private int animDuration = 500;

    public UPMarqueeView(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 views
     */
    public void setViews(final List<View> views) {
        if (views == null || views.size() == 0) return;
        removeAllViews();
        for ( int i = 0; i < views.size(); i++) {
            final int position=i;
            
            /**
             * 这边的监听事件是对滚动的每一条的点击事件,在使用的时候可以打开,但是在打开的时候会获取此布局的焦点,导致外层的事件不能够点击,所以在使用的时候要注意
             */
            
            
//            //设置监听回调
//            views.get(i).setOnClickListener(new OnClickListener() {
//                @Override
//                public void onClick(View v) {
//                    if (onItemClickListener != null) {
//                        onItemClickListener.onItemClick(position, views.get(position));
//                    }
//                }
//            });
            addView(views.get(i));
        }
        startFlipping();
    }
//
//    /**
//     * 点击
//     */
//    private OnItemClickListener onItemClickListener;
//
//    /**
//     * 设置监听接口
//     * @param onItemClickListener
//     */
//    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
//        this.onItemClickListener = onItemClickListener;
//    }
//
//    /**
//     * item_view的接口
//     */
//    public interface OnItemClickListener {
//        void onItemClick(int position, View view);
//    }
}


主Activity文件:

package com.pony;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.pony.view.UPMarqueeView;

public class MainActivity extends Activity {

	private String flag = "log_message";
	
	/**
	 * 设置显示的view
	 */
	List<View> views = new ArrayList<View>();

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

		UPMarqueeView ts_activity = (UPMarqueeView) findViewById(R.id.sl_activity);
		setView();
		ts_activity.setViews(views);

	}
	
	/**
	 * 设置布局文件
	 */

	private void setView() {
		for (int i = 0; i < 3; i++) {
			final int position = i;
			// 设置滚动的单个布局
			LinearLayout moreView = (LinearLayout) LayoutInflater.from(MainActivity.this).inflate(R.layout.item_view, null);
			// 初始化布局的控件
			TextView tv1 = (TextView) moreView.findViewById(R.id.tv1);
			// 进行对控件赋值
			tv1.setText("Pony第"+i+"个信息");
			// 添加到循环滚动数组里面去
			views.add(moreView);
		}
	}

}

源码供大家学习:

http://download.csdn.net/detail/u014388322/9643727

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android毕业设计源码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值