首页 文章 精选 留言 我的

精选列表

搜索[自动装配],共10000篇文章
优秀的个人博客,低调大师

仿优酷Android客户端图片左右滑动(自动滑动)

最终效果: 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:orientation="vertical" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dip" android:background="@drawable/title_bk" > <ImageButton android:id="@+id/btn_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/btn_back_selector" android:src="@drawable/btn_back" /> <View android:id="@+id/line0" android:layout_width="1px" android:layout_height="fill_parent" android:layout_toRightOf="@id/btn_back" android:background="#aa11264f" /> <View android:layout_width="1px" android:layout_height="fill_parent" android:layout_toRightOf="@id/line0" android:background="#009ad6" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="优酷客户端" android:textColor="#FFFFFF" android:textSize="20sp" /> </RelativeLayout> <FrameLayout android:layout_width="fill_parent" android:layout_height="140dip" > <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="35dip" android:layout_gravity="bottom" android:background="#33000000" android:gravity="center" android:orientation="vertical" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="中国家庭院校园区域名字体现" android:textColor="#ffffff" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dip" android:gravity="center" > <View android:id="@+id/v_dot0" style="@style/dot_style" android:background="@drawable/dot_focused" /> <View android:id="@+id/v_dot1" style="@style/dot_style" /> <View android:id="@+id/v_dot2" style="@style/dot_style" /> <View android:id="@+id/v_dot3" style="@style/dot_style" /> <View android:id="@+id/v_dot4" style="@style/dot_style" /> </LinearLayout> </LinearLayout> </FrameLayout> </LinearLayout> 后台控制: package fengyan.viewpager; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.widget.ImageView; import android.widget.ImageView.ScaleType; import android.widget.TextView; /** * 仿优酷Android客户端图片左右滑动 * * @author SinaWeiBo:f309587969@126.com * @author TencentWeiBo:fengyanjava * */ public class MyViewPagerActivity extends Activity { private ViewPager viewPager; // android-support-v4中的滑动组件 private List<ImageView> imageViews; // 滑动的图片集合 private String[] titles; // 图片标题 private int[] imageResId; // 图片ID private List<View> dots; // 图片标题正文的那些点 private TextView tv_title; private int currentItem = 0; // 当前图片的索引号 // An ExecutorService that can schedule commands to run after a given delay, // or to execute periodically. private ScheduledExecutorService scheduledExecutorService; // 切换当前显示的图片 private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { viewPager.setCurrentItem(currentItem);// 切换当前显示的图片 }; }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageResId = new int[] { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; titles = new String[imageResId.length]; titles[0] = "巩俐不低俗,我就不能低俗"; titles[1] = "扑树又回来啦!再唱经典老歌引万人大合唱"; titles[2] = "揭秘北京电影如何升级"; titles[3] = "乐视网TV版大派送"; titles[4] = "热血屌丝的反杀"; imageViews = new ArrayList<ImageView>(); // 初始化图片资源 for (int i = 0; i < imageResId.length; i++) { ImageView imageView = new ImageView(this); imageView.setImageResource(imageResId[i]); imageView.setScaleType(ScaleType.CENTER_CROP); imageViews.add(imageView); } dots = new ArrayList<View>(); dots.add(findViewById(R.id.v_dot0)); dots.add(findViewById(R.id.v_dot1)); dots.add(findViewById(R.id.v_dot2)); dots.add(findViewById(R.id.v_dot3)); dots.add(findViewById(R.id.v_dot4)); tv_title = (TextView) findViewById(R.id.tv_title); tv_title.setText(titles[0]);// viewPager = (ViewPager) findViewById(R.id.vp); viewPager.setAdapter(new MyAdapter());// 设置填充ViewPager页面的适配器 // 设置一个监听器,当ViewPager中的页面改变时调用 viewPager.setOnPageChangeListener(new MyPageChangeListener()); } @Override protected void onStart() { scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); // 当Activity显示出来后,每两秒钟切换一次图片显示 scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2, TimeUnit.SECONDS); super.onStart(); } @Override protected void onStop() { // 当Activity不可见的时候停止切换 scheduledExecutorService.shutdown(); super.onStop(); } /** * 换行切换任务 * * @author Administrator * */ private class ScrollTask implements Runnable { public void run() { synchronized (viewPager) { System.out.println("currentItem: " + currentItem); currentItem = (currentItem + 1) % imageViews.size(); handler.obtainMessage().sendToTarget(); // 通过Handler切换图片 } } } /** * 当ViewPager中页面的状态发生改变时调用 * * @author Administrator * */ private class MyPageChangeListener implements OnPageChangeListener { private int oldPosition = 0; /** * This method will be invoked when a new page becomes selected. * position: Position index of the new selected page. */ public void onPageSelected(int position) { currentItem = position; tv_title.setText(titles[position]); dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal); dots.get(position).setBackgroundResource(R.drawable.dot_focused); oldPosition = position; } public void onPageScrollStateChanged(int arg0) { } public void onPageScrolled(int arg0, float arg1, int arg2) { } } /** * 填充ViewPager页面的适配器 * * @author Administrator * */ private class MyAdapter extends PagerAdapter { @Override public int getCount() { return imageResId.length; } @Override public Object instantiateItem(View arg0, int arg1) { ((ViewPager) arg0).addView(imageViews.get(arg1)); return imageViews.get(arg1); } @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView((View) arg2); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View arg0) { } @Override public void finishUpdate(View arg0) { } } } 本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/3695356.html如需转载请自行联系原作者 欢醉

优秀的个人博客,低调大师

Android自动化测试之使用java调用monkeyrunner(补充篇)

上一篇使用java调用monkeyrunner(http://fengbohaishang.blog.51cto.com/5106297/1065647)中遗留了一个问题,就是上次用的是低版本的4个包解决的问题,使用高版本的jar包怎么调用monkeyrunner呢? 经过一位朋友的提示说,现在高版本的方法已经变了,我就按照他的提示,上网搜了一下需要的类,测试通过后,特写此补充篇总结一下。 上次使用的是android sdktools路径下的lib里面的4个包:ddmlib.jar,guavalib.jar,monkeyrunner.jar,sdklib.jar.而更新后的版本需要添加另外一个包就是:chimpchat.jar,monkerunner.jar这个包倒不是必须的了。另外,低版本中是用AdbMonkeyDevice实现IMonkeyDevice,高版本中没有这两个类了,用的AdbChimpDevice和IchimpDevice。 而通过查看AdbChimpDevice( http://code.google.com/p/aster/source/browse/src/com/android/chimpchat/adb/AdbChimpDevice.java?r=967f7f8cd6249c69e00c6de7ff1b55bd0f51d311)和IchimpDevice( http://code.google.com/p/aster/source/browse/src/com/android/chimpchat/core/IChimpDevice.java?r=967f7f8cd6249c69e00c6de7ff1b55bd0f51d311)这两个类在官方的源码,就不难发现,AdbChimpDevice实现了IchimpDevice这个接口,不过连接方法还是通过AdbBackend,通过adb方式连接模拟器,或者真机。只是Device的父类发生了变化。 下面还是用以前的测试类,进行稍微改变一下,就可以看出两者的不同: importjava.util.ArrayList; importjava.util.Collection; importjava.util.HashMap; importcom.android.chimpchat.adb.AdbBackend; importcom.android.chimpchat.adb.AdbChimpDevice; publicclassTestNewMonkeyrunner{ /** *@paramargs */ //这里有变化 privatestaticAdbChimpDevicedevice; privatestaticAdbBackendadb; publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub if(adb==null){ adb=newAdbBackend(); //参数分别为自己定义的等待连接时间和设备id //这里需要注意一下adb的类型 device=(AdbChimpDevice)adb.waitForConnection(8000,"MSM8225QRD5"); } //添加启动权限 Stringaction="android.intent.action.MAIN"; Collection<String>categories=newArrayList<String>(); categories.add("android.intent.category.LAUNCHER"); //启动要测试的主界面 device.startActivity(null,action,null,null,categories, newHashMap<String,Object>(),"cn.com.fetion/.android.ui.activities.StartActivity",0); //点击某一个坐标 //touch方法略有变化 device.touch(202,258,com.android.chimpchat.core.TouchPressType.DOWN_AND_UP); } } 从上面可以看出,高版本与低版本的变化,并不是很多。只要连接上设备,一些需要用到的操作方法,自己可以去源码里面看,也可以自己重写一些常用的方法。 源码里的注释是非常详细,比如IchimpDevice接口类中的startActivity方法: voidstartActivity(@NullableStringuri,@NullableStringaction, @NullableStringdata,@NullableStringmimeType, Collection<String>categories,Map<String,Object>extras,@NullableStringcomponent, intflags); /** *Sendabroadcastintenttothedevice. * *@paramuritheURIfortheIntent *@paramactiontheactionfortheIntent *@paramdatathedataURIfortheIntent *@parammimeTypethemimetypefortheIntent *@paramcategoriesthecategorynamesfortheIntent *@paramextrastheextrastoaddtotheIntent *@paramcomponentthecomponentoftheIntent *@paramflagstheflagsfortheIntent */ 该方法里对重要参数解释的都很清楚。所以,建议正在研究java调用monkeyrunner问题的朋友们,不要忘了源码这个最好的资源。 本文转自 风泊海上 51CTO博客,原文链接:http://blog.51cto.com/fengbohaishang/1071155

优秀的个人博客,低调大师

appium+python自动化24-滑动方法封装(swipe)

swipe介绍 1.查看源码语法,起点和终点四个坐标参数,duration是滑动屏幕持续的时间,时间越短速度越快。默认为None可不填,一般设置500-1000毫秒比较合适。 swipe(self, start_x, start_y, end_x, end_y, duration=None) Swipe from one point to another point, for an optional duration. 从一个点滑动到另外一个点,duration是持续时间 :Args: - start_x - 开始滑动的x坐标 - start_y - 开始滑动的y坐标 - end_x - 结束点x坐标 - end_y - 结束点y坐标 - duration - 持续时间,单位毫秒 :Usage: driver.swipe(100, 100, 100, 400) 2.手机从左上角开始为0,横着的是x轴,竖着的是y轴 获取坐标 1.由于每个手机屏幕的分辨率不一样,所以同一个元素在不同手机上的坐标也是不一样的,滑动的时候坐标不能写死了。可以先获取屏幕的宽和高,再通过比例去计算。 # coding:utf-8 from appium import webdriver desired_caps = { 'platformName': 'Android', 'deviceName': '30d4e606', 'platformVersion': '4.4.2', # apk包名 'appPackage': 'com.taobao.taobao', # apk的launcherActivity 'appActivity': 'com.taobao.tao.welcome.Welcome' } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 获取屏幕的size size = driver.get_window_size() print(size) # 屏幕宽度width print(size['width']) # 屏幕高度width print(size['height']) 2.运行结果: {u'width': 720, u'height': 1280} 720 1280 封装滑动方法 1.把上下左右四种常用的滑动方法封装,这样以后想滑动屏幕时候就能直接调用了 参数1:driver 参数2:t是持续时间 参数3:滑动次数 2.案例参考 # coding:utf-8 from appium import webdriver from time import sleep desired_caps = { 'platformName': 'Android', 'deviceName': '30d4e606', 'platformVersion': '4.4.2', # apk包名 'appPackage': 'com.taobao.taobao', # apk的launcherActivity 'appActivity': 'com.taobao.tao.welcome.Welcome' } driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) def swipeUp(driver, t=500, n=1): '''向上滑动屏幕''' l = driver.get_window_size() x1 = l['width'] * 0.5 # x坐标 y1 = l['height'] * 0.75 # 起始y坐标 y2 = l['height'] * 0.25 # 终点y坐标 for i in range(n): driver.swipe(x1, y1, x1, y2, t) def swipeDown(driver, t=500, n=1): '''向下滑动屏幕''' l = driver.get_window_size() x1 = l['width'] * 0.5 # x坐标 y1 = l['height'] * 0.25 # 起始y坐标 y2 = l['height'] * 0.75 # 终点y坐标 for i in range(n): driver.swipe(x1, y1, x1, y2,t) def swipLeft(driver, t=500, n=1): '''向左滑动屏幕''' l = driver.get_window_size() x1 = l['width'] * 0.75 y1 = l['height'] * 0.5 x2 = l['width'] * 0.05 for i in range(n): driver.swipe(x1, y1, x2, y1, t) def swipRight(driver, t=500, n=1): '''向右滑动屏幕''' l = driver.get_window_size() x1 = l['width'] * 0.05 y1 = l['height'] * 0.5 x2 = l['width'] * 0.75 for i in range(n): driver.swipe(x1, y1, x2, y1, t) if __name__ == "__main__": print(driver.get_window_size()) sleep(5) swipLeft(driver, n=2) sleep(2) swipRight(driver, n=2) appiumQQ群:512200893

优秀的个人博客,低调大师

Centos7系统自动安装jdk1.7脚本

1.首先查看自己电脑上面是否安盐水鸭 南京特产 南京特产有哪些装默认的jdk。 rpm -qa |grep jdk 2.如果有的话,先卸载sun公司的openjdk。 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64 将类似的jdk卸载掉之后再安装。 3.本次安装的是jdk-7u80-linux-x64.tar.gz,解压安装包进行安装。 jdk-7u80-linux-x64.tar.gz安装包的百度云链接:https://yun.baidu.com/s/1bncwr8b 4.运行install_Jdk.sh,在运行脚本之前首先给脚本install_Jdk.sh 添加可执行权限。 chmod +x install_Jdk.sh 5.将脚本与第三步中的安装包放在同一目录下面,然后执行./install_Jdk.sh 6.安装的jdk的目录在/usr/local/jdk1.7 7.之后测试是否安装成功。java -version [plain]view plain copy #!/bin/bash #shellscripttoinstalljdk #1.removeopenjdkifexists. foriin$(rpm-qa|grepopenjdk|grep-vgrep) do echo"Deletingrpm->"$i rpm-e--nodeps$i done if[[!-z$(rpm-qa|grepjdk|grep-vgrep)]]; then echo"-->FailedtoremovethedefultJdk." else #2.tarandinstallJDK(jdk-7u80-linux-x64.tar.gz) tar-zxvfjdk-7u80-linux-x64.tar.gz mv./jdk1.7.0_80/usr/local/jdk1.7 rm-rf./jdk1.7.0_80 #3.config/etc/profile echo"exportJAVA_HOME=/usr/local/jdk1.7">>/etc/profile echo-e'exportCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile echo-e'exportPATH=$PATH:$JAVA_HOME/bin'>>/etc/profile source/etc/profile fi

优秀的个人博客,低调大师

阿里云PCDN新亮点 自动调用HTTPDNS 解决域名劫持困扰

什么是域名劫持? 要想了解域名劫持,先了解域名解析服务器(DNS),它是Internet上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。而通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析。 域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器,或伪造域名解析服务器的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。 为什么要防劫持? 域名劫持会对业务产生负面影响, 如访问出现失败、不稳定、错误、跳转至第三方内容等情况,进而造成业务流失、客户投诉、严重影响用户体验等诸多不良影响。 既然防劫持这么重要,我们是否有一种方法能在享受阿里云PCDN服务的流畅、高效的分发服务的同时,也保护自身域名不被劫持呢? 据悉,最新的阿里云PCDN SDK已经

优秀的个人博客,低调大师

《Oracle高性能自动化运维》一一3.4 Redo优化

3.4 Redo优化从前面的内容可以知道,Oracle Redo的产生主要是由DML事务引起的,与DML事务相关的数据库更改主要包含:数据块更改;回滚段数据块镜像更新;数据库内部信息更新(数据字典表更新)。可以通过日志挖掘获取数据库更改的相关信息,如下: 可以看到,Redo中记录了DML事物的数据块更改、回滚段更新等信息。因此,可以考虑采取以下措施来减少Redo的产生,从而达到优化Redo的目的:减少索引键更新操作;减少大表(键)更新操作;使用Direct Load加载数据;使用Nologging进行特定操作;使用临时表(Temporary Table);;使用外部表(External Table);批量化处理DML业务程序;减少事务Commit次数,采用组提交的方式;减少Select For Update显示锁定,可以明显减少Re

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册