我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android:Viewpager——彻底解决广告条

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android:Viewpager——彻底解决广告条

文章目录彻底解决广告条最简单的使用1、activity_main.xml2、MainActivity.java3、MyPagerAdapter.java有描述和指示点1、activity_main.xml2、指示点3、MainActivity.java能够循环自动循环1、需要考虑什么?2、主方法3、初始化images数据4、onTouch监听4、初始化Viewpager点击事件 彻底解决广告条

一步一步实现广告条的制作,从最初的到添加描述和指示点,然后实现循环,以及自动循环。还有为每张视图添加点击事件……

中间处理了遇到的问题,比如:怎么实现左右都能循环?怎么解决出现的空白页面问题?加上自动循环之后需要考虑用户的哪些操作?等等。

最终效果:

在这里插入图片描述

最简单的使用 1、activity_main.xml

2、MainActivity.java
public class MainActivity extends AppCompatActivity {
    private final int[] imagesIds = {
            R.drawable.tazai,
            R.drawable.tazaih,
            R.drawable.sen,
            R.drawable.chuya,
            R.drawable.zhitian,
    };
    private ArrayList images;
    @BindView(R.id.viewpager)
    ViewPager viewpager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        setTitle("Demo");
        images = new ArrayList();
        for (int i = 0; i < imagesIds.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(imagesIds[i]);
            images.add(imageView);
        }
        viewpager.setAdapter(new MyPagerAdapter(images));
    }
}
3、MyPagerAdapter.java
class MyPagerAdapter extends PagerAdapter {
    private ArrayList images;
    public MyPagerAdapter(ArrayList images) {
        this.images = images;
    }
    @Override
    public int getCount() {
        return images.size();
    }
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = images.get(position);
        container.addView(imageView);
        return imageView;
    }
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object; //这个object为上一个方法返回的imageView。
    }
    
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View)object);
    }
}

写到这里,我们的界面已经可以滑动了,只是我们在使用的时候无法知道一共有多少个页面,以及我们现在处于哪个页面。下面我们来添加每个页面的描述和指示点。

有描述和指示点 1、activity_main.xml

首先xml布局中,我们添加了垂直布局的LinearLayout,上面为一个TextView用来描述页面,下面是用一个水平布局的LinearLayout来放我们的指示点。这个指示点我们要动态添加。


2、指示点

我们用自定义的shape来表示指示点,分别有被选中时候的point_focued和没被选中时候的point_normal。最后用selector来设置不同选择状态下的相应的drawable值。

【res】——【drawable】——point_normal.xml


【res】——【drawable】——point_focued.xml


【res】——【drawable】——point_selector.xml


3、MainActivity.java

在每次为页面增加ImageView的时候,我们动态添加指示点。首先,指示点依point然用ImageView来显示,只是我们这次将背景设置为我们刚刚上面定义的point_selector。接着我们为point设置布局参数。由于我们的point本身是在线性布局中的,所以这里设置的参数一定要是: LinearLayout.LayoutParams,然后使用setLayoutParams()添加参数。最后使用addView()将point添加到LinearLayout布局中。

要能够描述当前界面,我们只需要把id=description的TextView设置为相对应的描述就可以了。要使指示点能够指示当前界面,本来是上一个界面的指示点亮,现在我们需要让上一个指示点灭,然后让本次的指示点亮,这就需要我们用一个变量“lastPointIndex”保存上一个指示点的位置。要实现循环的话,我们一会儿再讨论,这里只是实现顺次滑动。

那么我们要在哪里设置描述和指示点的亮灭呢?ViewPager为我们提供了

addOnPageChangeListener()
方法来监听页面的滑动。里面传入
OnPageChangeListener
接口,该接口有三个方法我们可以去覆写。这里我们只实现onPageSelected()就可以了,顾名思义,这个就是当页面被选中的时候也就是页面完全显示在我们界面上的时候回调的方法。

public class MainActivity extends AppCompatActivity {
    private final int[] imagesIds = {
            R.drawable.tazai,
            R.drawable.tazaih,
            R.drawable.sen,
            R.drawable.chuya,
            R.drawable.zhitian,
    };
    private final String[] imagesDes = {
            "为野犬,干杯!",
            "最年少干部·太宰治",
            "港口黑手党的首领",
            "污浊了的忧伤之中",
            "全世界最好的织田作"
    };
    private ArrayList images;
    private int lastPointIndex;
    @BindView(R.id.viewpager)
    ViewPager viewpager;
    @BindView(R.id.point_group)
    LinearLayout pointGroup;
    @BindView(R.id.description)
    TextView description;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        setTitle("Demo");
        images = new ArrayList();
        for (int i = 0; i < imagesIds.length; i++) {
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(imagesIds[i]);
            imageView.setPadding(5, 5, 5, 5);
            images.add(imageView);
            //定义指示点
            ImageView point = new ImageView(this);
            point.setBackgroundResource(R.drawable.point_selector);
            //设置布局参数
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,-2);//-2,-2
            params.leftMargin = 15;
            point.setLayoutParams(params);
            //添加指示点
            pointGroup.addView(point);
            if(i==0){
                point.setEnabled(true);
            }else{
                point.setEnabled(false);
            }
        }       
        viewpager.setAdapter(new MyPagerAdapter(images));
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override  //页面被滑动
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
            @Override  //页面被选择
            public void onPageSelected(int position) {
                description.setText(imagesDes[position]);
                pointGroup.getChildAt(lastPointIndex).setEnabled(false);//上一个变成灰色
                pointGroup.getChildAt(position).setEnabled(true); 
                lastPointIndex = position;
            }
            @Override  //页面状态发生变化,静止——滑动;滑动——静止
            public void onPageScrollStateChanged(int state) { }
        });
    }//onCreate()
}
能够循环

假设现在有 5 张图片,那么对应的坐标是0,1,2,3,4。我们要做的就是实现0123401234……

首先如果每次坐标对5取余,那么仍然得到当前坐标。

在MyPagerAdapter中,首先将图片的数量改为一个很大的值,这里我们改为:

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

然后把所有position的位置修改为position%images.size()。

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

在MainActivity中,首先为当前页面设置中间位置,这样就能保证开始的时候左右都可以滑动:

//viewpager.setCurrentItem(viewpager.getCurrentItem()+1);
//保证是imageview的整数倍,就能保证第一个开始的还是0.
int item = Integer.MAX_VALUE/2-Integer.MAX_VALUE/2%images.size();
viewpager.setCurrentItem(Integer.MAX_VALUE/2);

接着修改以下内容:

viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
	……
      @Override  //页面被选择
      public void onPageSelected(int position) {
          int index = position%images.size();
          description.setText(imagesDes[index]);
          pointGroup.getChildAt(lastPointIndex).setEnabled(false);
          pointGroup.getChildAt(index).setEnabled(true);
          lastPointIndex = index;
      }
});

但是运行时发现,向右滑动没问题,一旦向左滑动就会出现:

在这里插入图片描述

在对应出错的位置,加上以下内容:

​ ViewGroup parent = (ViewGroup)imageView.getParent();
​ if (parent != null) {
​ parent.removeView(imageView);
​ }

   public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = images.get(position%images.size());
        //container相当于viewpager
        ViewGroup parent = (ViewGroup)imageView.getParent();
        if (parent != null) {
            parent.removeView(imageView);
        }
        container.addView(imageView);
        return imageView;
    }

确实可以往左滑动了,但是会出现空白页面,接着做了以下修改问题解决:去掉这里的removeView

public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
       // container.removeView((View)object);
}
自动循环

我们可以用Handler来实现:

 private Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
           // super.handleMessage(msg);
            if (msg.what == 0) {
                int item = viewpager.getCurrentItem() + 1;
                viewpager.setCurrentItem(item);
                handler.sendEmptyMessageDelayed(0, 3000);
            }
        }
};
1、需要考虑什么?

要能够自动循环,我们需要注意的问题是,当用户点击某个页面的时候,我们要让循环停止。释放时,继续循环。所以我们可以在用户点击时,删除消息队列里面相应的message,当手指离开时,又继续添加。

首先在每张图片上添加Touch监听,主要涉及到了3个状态,①手指按下ACTION_DOWN,②手指移动ACTION_MOVE,③手指离开ACTION_UP

当手指点一下,马上离开,会触发①③;
当手指在页面滑动时(包括滑离页面),基本每次都会触发①②。

所以按照我们的分析,我们需要在状态时ACTION_DOWN时删除message,在ACTION_UP时添加message。但是这样考虑会有bug,我们继续往下看。

对于Viewpager上的事件监听,这里我们考虑3个状态,④SCROLL_STATE_DRAGGING表示正在拖拽,⑤SCROLL_STATE_SETTLING表示正在调整到最终状态,⑥SCROLL_STATE_IDLE表示调整到了最终状态后的空闲状态。

当我们不去管它,由它自动循环时,只会触发⑤⑥;
当我们拖拽时,会触发④,这时候如果拖拽到中间,没有让任何一个页面完全显示出来,那么不会触发⑤⑥,只有松开手,或者手指拖动到下一个页面完全显示在屏幕时,才会连续触发⑤⑥,接着又会继续触发⑤⑥。

所以总体来看,拖动一次,触发的事件顺序为①②④⑤⑥:

在这里插入图片描述

所以这样就看到bug了吧,当我们手指在界面上移动,结束后根本不会触发ACTION_DOWN,那么就不能继续发送消息实现循环。所以我们还得考虑,如果手指在界面上移动了,也就是产生拖拽了,我们可以在调整好了位置之后,也就是在⑥SCROLL_STATE_IDLE继续发送一个消息,实现循环。

为了方便阅读,对代码做了以下方法封装,并且也删除了log.d()的输出。

2、主方法
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    private final String TAG = this.getClass().getSimpleName();
    private final int[] imagesIds = {
            R.drawable.tazai,
            R.drawable.tazaih,
            R.drawable.sen,
            R.drawable.chuya,
            R.drawable.zhitian,
    };
    private final String[] imagesDes = {
            "为野犬,干杯!",
            "最年少干部·太宰治",
            "港口黑手党的首领",
            "污浊了的忧伤之中",
            "全世界最好的织田作"
    };
    private ArrayList images;
    private int lastPointIndex = 0;
    private boolean isDragging = false;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
           // super.handleMessage(msg);
            if (msg.what == 0) {
                int item = viewpager.getCurrentItem() + 1;
                viewpager.setCurrentItem(item);
                handler.sendEmptyMessageDelayed(0, 3000);
            }
        }
    };
    @BindView(R.id.viewpager)
    ViewPager viewpager;
    @BindView(R.id.point_group)
    LinearLayout pointGroup;
    @BindView(R.id.description)
    TextView description;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        setTitle("Demo");
        init();
        initViewpager();
    } 
    ………………
}
3、初始化images数据
private void init() {
        images = new ArrayList();
        for (int i = 0; i < imagesIds.length; i++) {
            //添加图片
            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(imagesIds[i]);
            imageView.setOnTouchListener(this::onTouch); //为图片设置事件监听
            images.add(imageView);
            //添加点
            ImageView point = new ImageView(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, -2);
            params.leftMargin = 15;
            point.setLayoutParams(params); //为指示点设置参数
            point.setBackgroundResource(R.drawable.point_selector);
            pointGroup.addView(point);
            //默认选择第一个点
            if (i == 0) {
                point.setEnabled(true);
            } else {
                point.setEnabled(false);
            }
        }
    }
4、onTouch监听
	@Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:  //手指按下
                handler.removeMessages(0);
                break;
            case MotionEvent.ACTION_UP: //手指离开
                handler.sendEmptyMessageDelayed(0, 4000);
                break;
            case MotionEvent.ACTION_MOVE:  //手指在界面上移动
                break;
        }
        return true;
    }
4、初始化Viewpager
private void initViewpager() {
        viewpager.setAdapter(new MyPagerAdapter(images));
        int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % images.size();
        viewpager.setCurrentItem(item);
        handler.sendEmptyMessageDelayed(0, 3000);
        //为viewpager设置监听
        viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //页面被滑动
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }
            //页面被选择
            @Override
            public void onPageSelected(int position) {
                int index = position % images.size();
                description.setText(imagesDes[index]);
                pointGroup.getChildAt(lastPointIndex).setEnabled(false);
                pointGroup.getChildAt(index).setEnabled(true);
                lastPointIndex = index;
            }
           
            @Override
            public void onPageScrollStateChanged(int state) {
                switch (state) {
                    case ViewPager.SCROLL_STATE_DRAGGING: //拖拽
                        handler.removeMessages(0);
                        isDragging = true;
                        break;
                    case ViewPager.SCROLL_STATE_SETTLING:  //调整
                        break;
                    case ViewPager.SCROLL_STATE_IDLE:   //空闲
                        if (isDragging){
                            handler.removeMessages(0);
                            handler.sendEmptyMessageDelayed(0, 3000);
                        }
                        isDragging = false;
                        break;
                }
            }
        });
    }
点击事件

添加点击事件,由于我们需要获得image的坐标,所以把点击事件放在适配器MyPagerAdapter中,同时增加成员变量:上下文mContext和图片描述imagesDes。

比较简单,不再解释了,直接上最终代码:

public class MyPagerAdapter extends PagerAdapter {
    private ArrayList images;
    private String[] imagesDes;
    private Context mContext;
    public MyPagerAdapter(ArrayList images, String[] imagesDes, Context mContext) {
        this.images = images;
        this.imagesDes = imagesDes;
        this.mContext = mContext;
    }
    @Override
    public int getCount() {
       return Integer.MAX_VALUE;
    }
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        int index = position%images.size();
        ImageView imageView = images.get(index);
        ViewGroup parent = (ViewGroup)imageView.getParent();
        if (parent != null) {
            parent.removeView(imageView);
        }
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = imagesDes[index];
                Toast.makeText(mContext,text,Toast.LENGTH_SHORT).show();
            }
        });
        container.addView(imageView);
        return imageView;
    }
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
       // container.removeView((View)object);
    }
}

MainActivity中只修改一处即可:

viewpager.setAdapter(new MyPagerAdapter(images,imagesDes,this));

啊,完成!这么久,终于解决了广告条这个小怪兽。


作者:小土boo


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android:Viewpager——彻底解决广告条

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android:Viewpager——彻底解决广告条

文章目录彻底解决广告条最简单的使用1、activity_main.xml2、MainActivity.java3、MyPagerAdapter.java有描述和指示点1、activity_main.xml2、指示点3、MainActivit
2022-06-06

电脑老是弹出广告怎么彻底解决

这篇“电脑老是弹出广告怎么彻底解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“电脑老是弹出广告怎么彻底解决”文章吧。电脑老
2023-07-02

win10弹窗广告如何彻底清除

要彻底清除Windows 10弹窗广告,可以按照以下方法操作:1. 卸载可能引起弹窗广告的程序:打开“控制面板”,选择“程序”,然后点击“卸载程序”。浏览列表,找到可能引起弹窗广告的程序,选择并点击“卸载”。2. 检查并清除恶意软件:运行一
2023-09-06

电脑右下角弹窗广告怎么彻底关闭

本篇内容主要讲解“电脑右下角弹窗广告怎么彻底关闭”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“电脑右下角弹窗广告怎么彻底关闭”吧!电脑右下角弹窗广告彻底关闭方法:方法一:1、右键此电脑,打开“管
2023-07-02

烦人的电脑小广告怎么彻底清除win7

由于我们安装了很多应用软件,或者一些不经意的操作,会使我们的电脑出现经常会跳出各种烦人的电脑小广告,非常影响我们的心情,那么电脑小广告怎么彻底清除的问题就出现了,其实电脑小广告彻底清除方法的方法还是不难的,今天就一win7系统为例,给大家介
2023-07-10

windows如何彻底关闭360安全卫士弹窗广告

这篇文章主要介绍“windows如何彻底关闭360安全卫士弹窗广告”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows如何彻底关闭360安全卫士弹窗广告”文章能帮助大家解决问题。360安全卫
2023-02-17

win7讨厌的电脑小广告的彻底消除实例教程

因为大家安裝了许多系统软件,或是一些无意间的实际操作,会使大家的电脑发生常常会跳出来各种各样讨厌的电脑小广告,十分危害人们的情绪,那麼电脑小广告如何彻底消除的现象就产生了,实际上电脑小广告彻底消除方式的方式或是容易的,今日就一win7系统软
2023-07-10

如何彻底屏蔽网页右下角的百度TV等广告窗口

刚才发了如何屏蔽QQ2009广告的一个文章(Vista、XP、Windows7下非会员如何去除QQ2009的广告) ,一位网友在评论里面跟帖,说Vista之家的广告多,如何屏蔽。我们也是网民,深知广告的惹人烦,就像,我们也是网站运营者,深知
2023-05-24

如何彻底解决win10假死现象

要彻底解决Win10假死现象,可以尝试以下方法:1. 更新驱动程序:确保计算机的所有驱动程序都是最新版本,特别是显卡和声卡驱动程序。2. 清理磁盘空间:删除不需要的文件和程序,以释放磁盘空间。可以使用磁盘清理工具或手动删除文件。3. 关闭不
2023-09-08

怎么彻底解决电脑蓝屏0×00000008E

本文小编为大家详细介绍“怎么彻底解决电脑蓝屏0×00000008E”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么彻底解决电脑蓝屏0×00000008E”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。彻底解决电
2023-07-01

Windows系统中如何彻底屏蔽网页右下角的百度TV等广告窗口

Windows系统中如何彻底屏蔽网页右下角的百度TV等广告窗口,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。刚才发了如何屏蔽QQ2009广告的一个文章(Vista、XP、Win
2023-06-14

彻底解决IDEA输出中文乱码问题

本文一共有3种方法,针对的情况是输出中文乱码问题 问题描述 无法正确输出中文字符:(请正确分辨自己是哪一种乱码问题!) 解决方法 1、最容易想到 File -> Settings -> File Encodings下设置编码格式为UTF-
2023-08-30

win8无法关机彻底解决方法(图文)

今天小编Window 8 系统下点击“关机”之后,过一会儿发现电脑并没有真的被关掉。如何才能解决 Window 8 系统下无法彻底关机的问题呢,其实很简单,往下看,只需5步: 计算机不能被彻底关闭,需要我们在系统中做
2022-06-04

win11如何彻底解决电脑死机蓝屏

这篇文章主要介绍“win11如何彻底解决电脑死机蓝屏”,在日常操作中,相信很多人在win11如何彻底解决电脑死机蓝屏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win11如何彻底解决电脑死机蓝屏”的疑惑有所
2023-07-01

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录