Android新闻公告切换效果(上下滚动&左右滚动)

今日,看到淘宝的一个效果,之前做的App中没做过,就实现了一下。使用的是原生的控件TextSwitcher,进行了简单的封装处理。
Android新闻公告切换效果

废话少说,呈上代码。


package com.panghu.view;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
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.ImageView;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.ViewSwitcher;


import com.panghu.R;


/**
 *
 * 公告新闻切换
 *
 * Wetchat : ljphhj
 * Github : https://github.com/xiaoyaomeng
 * Autor : lijiangping
 */
public class CustomTextSwitcher extends TextSwitcher implements ViewSwitcher.ViewFactory {

    private Context mContext;
    private String[] mData;
    private final long DEFAULT_TIME_SWITCH_INTERVAL = 1000;//1s
    private long mTimeInterval = DEFAULT_TIME_SWITCH_INTERVAL;
    private int mCurrentIndex = 0;

    public CustomTextSwitcher(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        setFactory(this);
    }

    public CustomTextSwitcher setInAnimation(int animationResId){
        Animation animation = AnimationUtils.loadAnimation(this.mContext, animationResId);
        setInAnimation(animation);
        return this;
    }

    public CustomTextSwitcher setOutAnimation(int animationResId){
        Animation animation = AnimationUtils.loadAnimation(this.mContext, animationResId);
        setOutAnimation(animation);
        return this;
    }

    /**
     * 通知/公告数据绑定
     * @param data
     * @return
     */
    public CustomTextSwitcher bindData(String[] data){
        this.mData = data;
        return this;
    }

    public void startSwitch(long timeInterval){
        this.mTimeInterval = timeInterval;
        if (mData != null && mData.length != 0) {
            mSwitchHandler.sendEmptyMessage(0);
        }else{
            throw new RuntimeException("data is empty");
        }
    }

    /**
     * 工厂类中创建TextView供给TextSwitcher使用
     * @return
     */
    @Override
    public View makeView() {
        TextView view = new TextView(this.mContext);
        return view;
    }

    private Handler mSwitchHandler = new Handler(){
        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            int index = mCurrentIndex % mData.length;
            mCurrentIndex++;
            setText(mData[index]);
            sendEmptyMessageDelayed(0, mTimeInterval);
        }
    };

}

Demo下载地址: https://github.com/xiaoyaomeng/CustomTextSwitcher

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果你想要实现整页的上下滚动效果,可以使用 `ViewPager` 和 `Fragment`。`ViewPager` 是一个可以滑动切换子页面的视图,而 `Fragment` 则可以让你在同一个 Activity 中管理多个 UI 界面。你可以将每个 UI 界面封装到一个 Fragment 中,然后使用 ViewPager 来切换这些 Fragment。 以下是一个简单的示例: 1. 创建一个 `ViewPager`,并将其放入布局文件中: ```xml <androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 创建多个 `Fragment`,每个 `Fragment` 对应一个 UI 界面: ```java public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment1, container, false); return rootView; } } public class Fragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment2, container, false); return rootView; } } public class Fragment3 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment3, container, false); return rootView; } } ``` 3. 创建一个 `PagerAdapter`,用于管理 `ViewPager` 中的 `Fragment`: ```java public class MyPagerAdapter extends FragmentPagerAdapter { private static final int NUM_PAGES = 3; public MyPagerAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new Fragment1(); case 1: return new Fragment2(); case 2: return new Fragment3(); default: return null; } } @Override public int getCount() { return NUM_PAGES; } } ``` 4. 将 `PagerAdapter` 设置到 `ViewPager` 中: ```java ViewPager viewPager = findViewById(R.id.viewPager); MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(pagerAdapter); ``` 现在,你可以运行程序,通过滑动屏幕来切换不同的 UI 界面了。如果你想要实现整页的上下滚动效果,可以在每个 Fragment 中加入 `ScrollView`,然后在 `ViewPager` 中设置 `android:overScrollMode="never"`,这样就可以禁止 `ViewPager` 的滑动效果,只保留 `ScrollView` 的滑动效果了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值