用惯了苹果的人都知道在在APP中只需要手指左右滑动就可以进行页面的转换,但是在Android中大部分软件还只是使用返回键来进行界面的更替,其实Android很早很早以前就支持手势去更新操作,只是很多APP中没有使用到GestureDetector,下面就简单说说通过GestureDetector来进行界面的更替,下面只给出关键代码,直接使用即可。
GestureDetector detector = new GestureDetector(this, new GestureDetector.OnGestureListener() {//
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > 120) {//向左滑动,在这里可以进行界面间的更新,你想怎么干就怎么干
Intent intent = new Intent();
intent.setClass(MainActivity.this, Two.class);
startActivity(intent);
return true;
} else if (e1.getX() - e2.getX() < -120) {//向右滑动
MainActivity.this.finish();
return true;
}
return false;
}
});
@Override
public boolean onTouchEvent(MotionEvent event) {//一定要在activity中重写onTouchEvent方法才能使手势生效
detector.onTouchEvent(event);
return super.onTouchEvent(event);
}
上面是在正常情况下的滑动,当你在ListView等本身带有滑动的控件使用手势绝对会冲突,下面只给出最简单最粗暴的解决方式—— 改变系统的 onTouchEvent 事件的顺序,重写dispatchTouchEvent方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
this.detector.onTouchEvent(ev);
return super.dispatchTouchEvent(ev);
}
以上就是通过GestureDetector手势来进行界面间的转换,对动画研究透彻的童鞋可以在界面交替时加上动画效果!GestureDetector还有很多功能,有兴趣的可以继续研究
日期时间选择器在电脑中js有许多了,在android开发中也在库了,我们下面为各位整理了一些关于Android日期时间选择器的应用例子。这里贴上一个Demo的源码,分享一下:
代码如下 | 复制代码 |
import java.text.SimpleDateFormat; private TextView tvTime, tvOptions; @Override @Override @Override } public static String getTime(Date date) {
|
当然只有上面一个源码文件肯定是不行的,分享这两个Demo的项目地址,大家可以去看一下。
http://itlanbao.com/code/users/10000/20150911/Android-PickerView-master.rar
例子2
代码如下 | 复制代码 |
自定义一个类: package com.wwj.datetimepicker; import java.text.SimpleDateFormat; import android.app.Activity; /** /** } public void init(DatePicker datePicker, TimePicker timePicker) { datePicker.init(calendar.get(Calendar.YEAR), /** ad = new AlertDialog.Builder(activity) onDateChanged(null, 0, 0, 0); public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { public void onDateChanged(DatePicker view, int year, int monthOfYear, calendar.set(datePicker.getYear(), datePicker.getMonth(), dateTime = sdf.format(calendar.getTime()); /** // 将初始日期时间2012年07月02日 16:45 拆分成年 月 日 时 分 秒 String yearStr = spliteString(date, "年", "index", "front"); // 年份 String monthStr = spliteString(monthAndDay, "月", "index", "front"); // 月 String hourStr = spliteString(time, ":", "index", "front"); // 时 int currentYear = Integer.valueOf(yearStr.trim()).intValue(); calendar.set(currentYear, currentMonth, currentDay, currentHour, /** }
package com.wwj.datetimepicker; import android.app.Activity; /** private String initStartDateTime = "2013年9月3日 14:44"; // 初始化开始时间 @Override // 两个输入框 startDateTime.setText(initStartDateTime); startDateTime.setOnClickListener(new OnClickListener() { DateTimePickDialogUtil dateTimePicKDialog = new DateTimePickDialogUtil( } endDateTime.setOnClickListener(new OnClickListener() { public void onClick(View v) { 自定义界面: <?xml version="1.0" encoding="utf-8"?> <DatePicker <TimePicker </LinearLayout> |
我们浏览淘宝商品详情的时候会遇到回到顶部这个功能,下面就说说这个功能的简单实现
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/sc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<WebView
android:id="@+id/wb"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</WebView>
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/bt"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/black"
android:layout_gravity="bottom"
android:text="点我向上"
android:textColor="#ffffff"
/>
</FrameLayout>
布局最外层使用FrameLayout,然后套上ScrollView,但是一定要注意ScrollView的高只能是wrap_content,要不然点击回到底部没效果。
代码如下
public class MainActivity extends AppCompatActivity {
private ScrollView sc;
private WebView wb;
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sc=(ScrollView)findViewById(R.id.sc);
wb=(WebView)findViewById(R.id.wb);
bt=(Button)findViewById(R.id.bt);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sc.post(new Runnable() {
@Override
public void run() {
sc.post(new Runnable() {
public void run() {
// 回到顶部
sc.fullScroll(ScrollView.FOCUS_UP);
}
});
}
});
}
});
initView();
}
private void initView() {
String url = "https://www.111cn.net/";
WebSettings webSettings = wb.getSettings();
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webSettings.setJavaScriptEnabled(true); //设置WebView属性执行Javascript脚本
//设置可以访问文件
webSettings.setAllowFileAccess(true);
webSettings.setBuiltInZoomControls(false);// 设置是否显示缩放工具
wb.loadUrl(url);
wb.setWebViewClient(new WebViewClient());
}
}
实现效果如图,我这里是使用webView链接百度的网页,换成其他的控件也是一样的
安卓开发之Picasso框架了解不多了,小编今天来为各位介绍两个关于安卓开发之Picasso框架例子,希望这两个例子能够帮助到各位。之前一直使用imageloader这个框架加载图片,觉得配置很麻烦,觉得使用Picasso这个框架。
什么是Picasso我就不多说了,大家可以去官网看,http://square.github.io/picasso/。
Picasso使用的方法汇总:
代码如下 | 复制代码 |
Picasso.with(this).cancelTag(this); |
然后呢,Picasso还提供了debug的标示,调用picasso的setIndicatorsEnabled方法,true是debug模式,跟踪代码其实就是在最后生成的
PicassoDrawable类的ondraw里绘制了个左上角小三角,根据
代码如下 | 复制代码 |
public enum LoadedFrom { |
枚举里的不同值标示不同加载来源,这对分析图片加载有好处。
在Picasso.with()的时候会将执行所需的所有必备元素创建出来,如缓存cache、执行executorService、调度dispatch等,在load()时创建Request,在into()中创建action、bitmapHunter,并最终交给dispatcher执行。
Picasso创建圆形图像
上篇介绍了Picasso这个框架,git地址是https://github.com/square/picasso。怎么实现各种各样的图片样式呢,在Picasso里提供了Transformation这个接口,我们可以自己实现。下面是一个实现圆形图片的demo;
代码如下 | 复制代码 |
public class CircleTransform implements Transformation { 使用它: Picasso.with(activity).load(mayorShipImageLink).transform(new CircleTransform()).into(ImageView); |
这里我是先导入eclipse,然后到处为gradle buid files ,再导入 android studio。
要是对gradle编译脚本熟悉的,可以直接导入,然后手动写gradle的配置文件。
1.下载qq android sdk
选择:
2. 解压后得到的目录结构为:
3.将上面的sample文件夹导入的Eclipse,目录结构如下:
修改项目的编码为UTF-8:
4.修复库依赖关系
代码显示有错误,那是因为我们没有将qq的sdk jar包放到libs目录下。
点击项目右键——Properities——Android,将错误的依赖关系删除:
5.导入sdk jar库
将下载的qq android sdk包下的 jar/目录下的 两个jar包 复制到 项目的libs目录:
此时项目的目录结构如下:
然后clean ,再重新编译。代码就没有报错了。
6.将项目导入到Android studio
最关键的一步,如何将eclipse中的项目导入到Android studio中:
右键项目,选择“export”——android——generate gradle build files ——然后选中要到处都项目,得到导出的项目包。
再将得到的项目包,导入到android studio中。会提示报错,我们需要将项目根目录的build.gradle文件中的(可能你的android studio使用的gradle版本和gradle插件版本与我的有不同,建议更改成自己的所使用的版本)
dependencies {
classpath 'com.android.tools.build:gradle:0.12+'
}
改为我们使用的新到gradle插件版本:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
注意:如果有可能,可能还需要改项目根目录下/gradle/wrapper/gradle-wrapper.properties中的
7.重新编译运行
改完后,点击“Sync now”,重新编译项目,就会发现项目没有报错,在模拟器中测试,一切正常。
android studio版本的QQ sdk demo下载(最新版)