正规网站建设的公司,个人如何网站备案,官网查询证书,市场调研的五个步骤本文主要讲述了实现安卓button点击变色与利用ViewPager实现图片自动轮播效果
我伞可以看到在很多应用中#xff0c;安卓按钮按下时与正常时状态是不同的#xff0c;这种效果也很容易达到。
第一步#xff1a;创建XML文件定义不同事件的不同效果
?xml version1…本文主要讲述了实现安卓button点击变色与利用ViewPager实现图片自动轮播效果
我伞可以看到在很多应用中安卓按钮按下时与正常时状态是不同的这种效果也很容易达到。
第一步创建XML文件定义不同事件的不同效果
?xml version1.0 encodingutf-8?
selector xmlns:androidhttp://schemas.android.com/apk/res/androiditem android:state_pressedtrueandroid:drawabledrawable/function_greenbutton_pressed / !-- pressed --item android:state_focusedtrueandroid:drawabledrawable/function_greenbutton_pressed / !-- focused --item android:drawabledrawable/function_greenbutton_normal / !-- default --
/selector
在上面就定义了在pressed与normal情况下安卓的图片会自动替换的效果。
第二步在布局文件中加入定义好的按钮就可以了 Button android:layout_widthwrap_content android:layout_heightwrap_content android:text按下文字会变效果 android:textColordrawable/btn_color android:backgrounddrawable/btn_bg /
利用ViewPager实现自动轮播图片
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parenttools:context.MainActivity android.support.v4.view.ViewPagerandroid:idid/viewpagerandroid:layout_widthmatch_parentandroid:layout_height200dp /LinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_alignBottomid/viewpagerandroid:background#33000000android:orientationvertical TextViewandroid:idid/image_descandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:gravitycenterandroid:textstring/app_nameandroid:textColorandroid:color/whiteandroid:textSize18sp /LinearLayoutandroid:idid/point_groupandroid:layout_widthwrap_contentandroid:layout_gravitycenter_horizontalandroid:layout_heightwrap_content /LinearLayout/LinearLayout/RelativeLayout
注意viewPager引入时要用全类名上面还定义了图片介绍与图片切换时小圆点也会切换
viewPager的主要方法
//设置适配器adapterviewPager.setAdapter(new MyPagerAdapter());
//设置当前的位置轮播到哪一个图片了
viewPager.setCurrentItem(Integer.MAX_VALUE/2 - (Integer.MAX_VALUE/2%imageList.size())) ;
//设置viewPager的监听事件
viewPager.setOnPageChangeListener(new OnPageChangeListener()
实现
适配器
private class MyPagerAdapter extends PagerAdapter {Override/*** 获得页面的总数*/public int getCount() {return Integer.MAX_VALUE;}Override/*** 获得相应位置上的view* container view的容器其实就是viewpager自身* position 相应的位置*/public Object instantiateItem(ViewGroup container, int position) {System.out.println(instantiateItem ::position);// 给 container 添加一个viewcontainer.addView(imageList.get(position%imageList.size()));//返回一个和该view相对的objectreturn imageList.get(position%imageList.size());}Override/*** 判断 view和object的对应关系 */public boolean isViewFromObject(View view, Object object) {if(view object){return true;}else{return false;}}Override/*** 销毁对应位置上的object*/public void destroyItem(ViewGroup container, int position, Object object) {System.out.println(destroyItem ::position);container.removeView((View) object);object null;}}
将当前页面总数设大一点就可以实现无限循环了viewpager总是只保持三个窗口循环利用并不会造成内存浪费将当前项设置在中间就可以左右自动循环了
事件监听实现
viewPager.setOnPageChangeListener(new OnPageChangeListener() {Override/*** 页面切换后调用 * position 新的页面位置*/public void onPageSelected(int position) {position position%imageList.size();//设置文字描述内容iamgeDesc.setText(imageDescriptions[position]);//改变指示点的状态//把当前点enbale 为true pointGroup.getChildAt(position).setEnabled(true);//把上一个点设为falsepointGroup.getChildAt(lastPosition).setEnabled(false);lastPosition position;}Override/*** 页面正在滑动的时候回调*/public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {}Override/*** 当页面状态发生变化的时候回调*/public void onPageScrollStateChanged(int state) {}});
实现自动播放
实现循环有以下几种方法 自动循环 1、定时器Timer 2、开子线程 while true 循环 3、ColckManager 4、 用handler 发送延时信息实现循环
这里采用第四种
在onCreate方法中 isRunning true;handler.sendEmptyMessageDelayed(0, 2000);
定义handler
/*** 判断是否自动滚动*/private boolean isRunning false;private Handler handler new Handler(){public void handleMessage(android.os.Message msg) {//让viewPager 滑动到下一页viewPager.setCurrentItem(viewPager.getCurrentItem()1);if(isRunning){handler.sendEmptyMessageDelayed(0, 2000);}};};protected void onDestroy() {isRunning false;};
另外关于layoutParams 的一些小知识
//添加指示点
ImageView point new ImageView(this);
LinearLayout.LayoutParams params new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.rightMargin 20;
point.setLayoutParams(params);
point.setBackgroundResource(R.drawable.point_bg);
当元素是在LinearLayout中时就要用LinearLayout.LayoutParams,在relativeLayout中时就要用relativeLayout.LayoutParams
实现效果