错误的今日头条

本文介绍了一个基于Android平台的应用架构设计,通过抽象基类`BaseActivity`实现通用功能,如全屏设置、视图绑定等,并展示了`MainActivity`的具体实现,包括侧滑菜单交互、页面切换逻辑及启动动画等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public abstract class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        init();
    }
    /**
     * 初始化
     */
    private void init() {
        setFullScreen();
        setContentView(initLayout());
        findView();
        setOnClickLisener();
        initData();
    }
    /**
     * 设置点击事件
     */
    protected abstract void setOnClickLisener();
    /**
     * 初始化数据
     */
    protected abstract void initData();
    /**
     * 查找控件
     */
    protected abstract void findView();
    /**
     * 设置全屏
     */
    protected abstract void setFullScreen();

    /**
     * 填充布局
     *
     * @return
     */
    protected abstract int initLayout();

    /**
     * 全屏
     */
    protected void fullScreen() {
        // 设置全屏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
}
public class MainActivity extends BaseActivity implements View.OnClickListener {

    private DrawerLayout draw_layout;
    private ImageView imageViewlogin;
    private RadioGroup radioGroup;


    @Override
    protected void setOnClickLisener() {
        imageViewlogin.setOnClickListener(this);
        draw_layout.addDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
                //滑动过程中不断回调 slideOffset:0~1
                View childAt = draw_layout.getChildAt(0);
                float scale = 1 - slideOffset;//1~0
                childAt.setTranslationX(drawerView.getMeasuredWidth() * (1 - scale));//0~width
            }

            @Override
            public void onDrawerOpened(@NonNull View drawerView) {

            }

            @Override
            public void onDrawerClosed(@NonNull View drawerView) {

            }

            @Override
            public void onDrawerStateChanged(int newState) {

            }
        });
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.bun1:
                        changePager(new Fragment1());
                        break;
                    case R.id.bun2:
                        changePager(new Fragment2());
                        break;
                    case R.id.bun3:
                        changePager(new Fragment3());
                        break;
                    case R.id.bun4:
                        changePager(new Fragment4());
                        break;
                }
            }
        });

    }
    /**
     * 改变页面
     *
     * @param fragment
     */
    private void changePager(Fragment fragment) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fl_container, fragment).commit();
    }

    @Override
    protected void initData() {
        radioGroup.check(R.id.bun1);

    }

    @Override
    protected void findView() {
        draw_layout = findViewById(R.id.draw_layout);
        imageViewlogin = findViewById(R.id.imageViewlogin);
        radioGroup = findViewById(R.id.radioGroup);

    }

    @Override
    protected void setFullScreen() {


    }

    @Override
    protected int initLayout() {
        return R.layout.activity_main;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.imageViewlogin:
                if (draw_layout.isDrawerOpen(Gravity.START)){
                    draw_layout.closeDrawer(Gravity.START);
                } else {
                    draw_layout.openDrawer(Gravity.START);
                }
                break;
        }
    }
}
class MyAdapter extends PagerAdapter {
    private  Context context;
    private  ArrayList<ImageView> list;

    public MyAdapter(Context context, ArrayList<ImageView> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = list.get(position % list.size());
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View) object);
    }
}
public class StartActivity extends BaseActivity implements Animation.AnimationListener {

    private AlphaAnimation alphaAnimation;
    private RelativeLayout rlSplash;
//设置点击事件
    protected void setOnClickLisener(){

    }
    //初始化数据
    protected void initData(){
        alphaAnimation = new AlphaAnimation(0, 1);
        alphaAnimation.setDuration(2000);
        alphaAnimation.setAnimationListener(this);

        rlSplash.startAnimation(alphaAnimation);

    }
    //查找控件
    protected void findView(){
        rlSplash = findViewById(R.id.rl_splash);
    }
    //设置全屏
    protected void setFullScreen(){
        fullScreen();
    }
    //填充布局
    protected int initLayout(){

        return R.layout.activity_start;
    }

    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {
toMain();
    }
    private void toMain(){
        startActivity(new Intent(this, MainActivity.class));
        finish();
    }
    @Override
    public void onAnimationRepeat(Animation animation) {

    }

}
class WenAdapter extends BaseAdapter {
    private final Context context;
    private final List<Newss.DataBean> list;

    public WenAdapter(Context context, List<Newss.DataBean> list1) {
        super();
        this.context=context;
        this.list=list1;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HolderView holder=null;
        if (convertView == null){
            holder= new HolderView();
            convertView = View.inflate(context, R.layout.wenadapter, null);
            holder.t_title = (TextView) convertView.findViewById(R.id.t_title);
            holder.i_mage = (ImageView) convertView.findViewById(R.id.i_mage);
            convertView.setTag(holder);
        }else{
            holder = (HolderView) convertView.getTag();
        }
        holder.t_title.setText(list.get(position).getTitle());
        //获取网络图片
     /*   DisplayImageOptions options = new DisplayImageOptions.Builder()
                .displayer(new RoundedBitmapDisplayer(100))
                .build();*/
        ImageLoader.getInstance().displayImage(list.get(position).getImg(),holder.i_mage,LoageImage.getOptions());
        return convertView;
    }
    public class HolderView{
        private TextView t_title;
        private ImageView i_mage;
    }
}
class XlistUtils {
    private static XlistUtils xlistUtils;
    private Xlister xlister;

    public static XlistUtils getlist(){
        if (xlistUtils==null){
            xlistUtils = new XlistUtils();
        }
        return xlistUtils;
    }
    public void getdata(String url){
        MyAsktaxsk data = new MyAsktaxsk();
        data.execute(url);
    }

    private class MyAsktaxsk extends AsyncTask<String,Integer,String> {
        @Override
        protected String doInBackground(String... strings) {
            String path = strings[0];
            try {
                URL url = new URL(path);
                HttpURLConnection Connection = (HttpURLConnection) url.openConnection();
                Connection.setRequestMethod("GET");
                Connection.setReadTimeout(5000);
                Connection.setConnectTimeout(5000);
                if (Connection.getResponseCode() == 200){
                    InputStream inputStream = Connection.getInputStream();
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] by = new byte[1024];
                    int len = 0;
                    while ((len = inputStream.read(by)) != -1){
                        bos.write(by,0,len);
                    }
                    inputStream.close();
                    bos.close();
                    String json = bos.toString();
                    return json;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.i("aaa",s);
            xlister.getjson(s);
        }
    }
    public interface Xlister{
        public void getjson(String json);
    }
    public void SetXlistr(Xlister xlister){
        this.xlister = xlister;
    }
}
public class Fragment1 extends Fragment {

    String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=15&page=";
    private ArrayList<ImageView> list;
    private List<com.bwei.dell.myprojecttwo.Newss.DataBean> list1 = new ArrayList<>();
    private int num = 1;
    private View view;
    private XListView x_listview;
    private WenAdapter adapter1;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0){
                String json = (String) msg.obj;
                Gson gson = new Gson();
                News news = gson.fromJson(json, News.class);
                List<News.BannerBean> banner = news.getBanner();
                for (int i=0;i<banner.size(); i++){
                    String image_url = banner.get(i).getImage_url();
                    ImageView imageView = new ImageView(getActivity());
                    DisplayImageOptions options = LoageImage.getOptions();
                    ImageLoader.getInstance().displayImage(image_url,imageView,options);
                    list.add(imageView);
                }
                MyAdapter adapter = new MyAdapter(getActivity(),list);
                vp.setAdapter(adapter);
            }else if (msg.what == 1){
                int i = vp.getCurrentItem();
                vp.setCurrentItem(++i);
                handler.sendEmptyMessageDelayed(1,1000);
            }
        }
    };
    private ViewPager vp;
    private RadioGroup rg;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment1,container,false);
        vp = (ViewPager) view.findViewById(R.id.vp);
        rg = (RadioGroup) view.findViewById(R.id.radio_group);

        list = new ArrayList<>();
        getdataimg();
        initfrom();
        getdatafrom();
        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                rg.check(rg.getChildAt(position%list.size()).getId());
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        return view;
    }

    private void initfrom() {
        x_listview = (XListView) view.findViewById(R.id.x_listview);
        //可以刷新
        x_listview.setPullRefreshEnable(true);
        //可以加载
        x_listview.setPullLoadEnable(true);
        //设置监听方法
        x_listview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {//刷新
                num = 1;
                getdatafrom();
            }

            @Override
            public void onLoadMore() {//加载
                num += 1;
                Log.i("sss",num+"");
                getdatafrom();
            }
        });
        adapter1 = new WenAdapter(getActivity(),list1);
        x_listview.setAdapter(adapter1);
    }

    private void getdataimg() {
        new Thread(){
            @Override
            public void run() {
                super.run();
                String path ="http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=banner";
                try {
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);
                    connection.setRequestMethod("GET");
                    if (connection.getResponseCode() == 200){
                        InputStream inputStream = connection.getInputStream();
                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
                        byte[] by = new byte[1024];
                        int len = 0;
                        while ((len = inputStream.read(by)) !=-1){
                            bos.write(by,0,len);
                        }
                        inputStream.close();
                        bos.close();
                        String json = bos.toString();
                        Message message = new Message();
                        message.what = 0;
                        message.obj = json;
                        handler.sendMessage(message);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    @Override
    public void onResume() {
        super.onResume();
        handler.sendEmptyMessageDelayed(1,1000);
    }

    @Override
    public void onPause() {
        super.onPause();
        handler.removeCallbacksAndMessages(null);
    }

    private void getdatafrom() {
        String url = path+num;
        XlistUtils utils = XlistUtils.getlist();
        utils.getdata(url);
        //接口回调
        utils.SetXlistr(new XlistUtils.Xlister() {
            @Override
            public void getjson(String jsonn) {
                //开始
                Gson gsonn = new Gson();
                Newss newss = gsonn.fromJson(jsonn, Newss.class);
                List<Newss.DataBean> data1 = newss.getData();
                if (num == 1){
                    list1.clear();
                }
                //添加
                list1.addAll(data1);
                //刷新适配器
                adapter1.notifyDataSetChanged();
                if (num == 1){
                    x_listview.stopRefresh();
                }else{
                    x_listview.stopLoadMore();
                }
            }
        });
    }
}
<RelativeLayout
    android:layout_weight="3"
    android:layout_width="match_parent"
    android:layout_height="0dp">
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>
    <RadioGroup
        android:id="@+id/radio_group"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="220dp"
        android:layout_marginLeft="330dp"
        >
        <RadioButton
            android:id="@+id/onebtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <RadioButton
            android:id="@+id/Twobtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <RadioButton
            android:id="@+id/Threebtn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <RadioButton
            android:id="@+id/five"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </RadioGroup>
</RelativeLayout>
<xlistview.bawei.com.xlistviewlibrary.XListView
    android:id="@+id/x_listview"
    android:layout_weight="7"
    android:layout_width="match_parent"
    android:layout_height="0dp"></xlistview.bawei.com.xlistviewlibrary.XListView>
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值