android 主页布局和仿美团gridview轮播

android 主页布局和仿美团gridview轮播

作为一个老程序员,来说这个问题特别简单,估计也有好几种主页布局方式
今天有个美女实习生问我怎么写类似与美团首页的那个gridview轮播
犹豫是美女问问题,我当然的写个啦,所谓我就在晚上花了2个小时的时间做了个,
大家不要以为我那个啦,我们作为老程序员应该多多照顾一些新人,这样我们也能够学到很多东西,才能够共同进步。
首先先看图,到底是个什么样子,其实很简单



是不是很简单,下面就给大家实现的原理
1、使用的库为:
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.afollestad.material-dialogs:core:0.9.0.2'
compile 'com.afollestad.material-dialogs:commons:0.9.0.2'
注解库和dialog库
主页   在此我使用的是注解的方式,至于为什么,大家应该都知道,节省时间吗
package com.wz.stat.demo;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.wz.stat.demo.fragment.IndexFragment;
import com.wz.stat.demo.fragment.MyFragment;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;

/************************************************
 * author:       火中燕.
 * email:        wangzhong0116@foxmail.com.
 * version:      1.0.1.
 * date:         2016/12/9 20:17.
 * description:  主页
 ***********************************************/
public class MainActivity extends AppCompatActivity{

    //自定义标题栏
    @Bind(R.id.txt_topbar)
    TextView txt_topbar;
    //底部选项卡按钮
    @Bind(R.id.txt_home)
    TextView txt_home;
    @Bind(R.id.txt_my)
    TextView txt_my;
    //中央可切换视图
    @Bind(R.id.ly_content)
    FrameLayout ly_content;

    //中央可切换视图
    private IndexFragment indexFragment;
    private MyFragment myFragment;
    private FragmentManager fManager;

    private FragmentTransaction fTransaction;

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

        fManager = getFragmentManager();
        bindViews();
        txt_home.performClick();
    }

    //UI组件初始化与事件绑定
    private void bindViews() {
        Drawable d_home = getResources().getDrawable(R.drawable.tab_menu_home);
        d_home.setBounds(0, 0, d_home.getMinimumWidth() - 10, d_home.getMinimumHeight() - 10);
        txt_home.setCompoundDrawables(null, d_home, null, null);

        Drawable d_my = getResources().getDrawable(R.drawable.tab_menu_my);
        d_my.setBounds(0, 0, d_my.getMinimumWidth() - 10, d_my.getMinimumHeight() - 10);
        txt_my.setCompoundDrawables(null, d_my, null, null);


    }

    //重置所有文本的选中状态
    private void setSelected() {
        txt_home.setSelected(false);
        txt_my.setSelected(false);
    }

    //隐藏所有Fragment
    private void hideAllFragment(FragmentTransaction fragmentTransaction) {
        if (indexFragment != null) fragmentTransaction.hide(indexFragment);
        if (myFragment != null) fragmentTransaction.hide(myFragment);
    }


    @OnClick({R.id.txt_home, R.id.txt_my})
    public void onClick(View v) {
        fTransaction = fManager.beginTransaction();
        hideAllFragment(fTransaction);
        switch (v.getId()) {
            case R.id.txt_home:
                setSelected();
                txt_home.setSelected(true);
                if (indexFragment == null) {
                    indexFragment = new IndexFragment();
                    fTransaction.add(R.id.ly_content, indexFragment);
                } else {
                    fTransaction.show(indexFragment);
                    txt_topbar.setText("首页");
                }
                break;
            case R.id.txt_my:
                setSelected();
                txt_my.setSelected(true);
                if (myFragment == null) {
                    myFragment = new MyFragment();
                    fTransaction.add(R.id.ly_content, myFragment);
                    txt_topbar.setText("个人中心");
                } else {
                    fTransaction.show(myFragment);
                    txt_topbar.setText("个人中心");
                }
                break;
        }
        fTransaction.commit();
    }


}
 
 
3、当然了最主要的还是gridview轮播
   其实很简单,主要是判断有几页,每页显示的数量,把他们展示到viewpager上
 
 
 
 
代码我就不一一贴了,我写了一个demo注释写的挺详细,为了给新人看吗,当然得写详细点
如果大家需要的话,直接去下载就行了 
CSDN下载地址:     http://download.csdn.net/detail/mingzhnglei/9707088
github下载地址:   https://github.com/rocky0116/my_station/tree/master
如果有什么问题大家也可以给我留言,请各位大神勿喷。
好的,我可以为您介绍如何使用pyecharts制作时间轮播折线图。 首先,需要安装pyecharts库,可以使用以下命令进行安装: ``` pip install pyecharts ``` 接下来,我们需要准备数据。以下是一个示例数据: ```python data = [ ['2022-01-01', 120, 220, 150, 80], ['2022-01-02', 100, 182, 130, 70], ['2022-01-03', 90, 182, 160, 60], ['2022-01-04', 140, 232, 130, 100], ['2022-01-05', 170, 282, 140, 120], ['2022-01-06', 145, 232, 130, 80], ['2022-01-07', 160, 252, 140, 90], ['2022-01-08', 135, 222, 115, 75], ['2022-01-09', 120, 212, 120, 60], ['2022-01-10', 100, 182, 130, 50] ] ``` 接下来,我们需要构建时间轮播图。 ```python from pyecharts.charts import Line from pyecharts import options as opts from pyecharts.commons.utils import JsCode # 构建图表 line = Line() # 添加 x 轴数据 line.add_xaxis([item[0] for item in data]) # 添加 y 轴数据 for i in range(1, len(data[0])): line.add_yaxis(series_name='系列{}'.format(i), y_axis=[item[i] for item in data]) # 添加时间轮播参数 line.add_js_funcs( JsCode( """ var data = {}; for (var i = 0; i < sourceData.length; ++i) { var date = sourceData[i][0]; var year = date.slice(0, 4); var month = date.slice(5, 7); var day = date.slice(8, 10); if (!data[year]) data[year] = {}; if (!data[year][month]) data[year][month] = {}; data[year][month][day] = sourceData[i].slice(1); } option.timeline.data = Object.keys(data).map(function (year) { return year; }); option.baseOption.series[0].data = data[option.timeline.data[0]][Object.keys(data[option.timeline.data[0]])[0]]; for (var i = 0; i < option.timeline.data.length; ++i) { var year = option.timeline.data[i]; var months = Object.keys(data[year]); var seriesData = []; for (var j = 0; j < months.length; ++j) { var days = Object.keys(data[year][months[j]]); for (var k = 0; k < days.length; ++k) { seriesData.push(data[year][months[j]][days[k]]); } } option.options.push({ series: [ {data: seriesData} ], title: { text: year + '年', left: 'center', top: 0 } }); } """ ) ) # 设置全局参数 line.set_global_opts( title_opts=opts.TitleOpts(title='时间轮播折线图', subtitle='示例数据'), tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), legend_opts=opts.LegendOpts(is_show=True), datazoom_opts=opts.DataZoomOpts( is_show=True, type_='inside', range_start=0, range_end=100 ), visualmap_opts=opts.VisualMapOpts( is_show=False, max_=300, min_=0, range_color=['#50a3ba', '#eac736', '#d94e5d'] ), timeline_opts=opts.TimelineOpts( is_auto_play=True, is_loop_play=False, is_inverse=True, play_interval=1000, pos_left='50', pos_bottom='0', orient='horizontal' ) ) # 渲染图表 line.render_notebook() ``` 以上代码中,我们首先创建了一个Line对象,然后添加 x 轴和 y 轴数据。接着,我们设置了一些全局参数,包括标题、提示框、图例、数据缩放、视觉映射和时间轮播。最后,我们添加了一个时间轮播参数,通过JS代码实现了数据的切换和更新。最后,我们使用`render_notebook()`方法将图表渲染到jupyter notebook中。 需要注意的是,以上代码中的时间轮播参数是针对数据的年份和月份进行了分组,如果您的数据没有年份和月份的话,可以根据实际情况进行修改。 希望能够帮到您!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值