Android开发之Activity的中部或底部回到顶部
我们浏览淘宝商品详情的时候会遇到回到顶部这个功能,下面就说说这个功能的简单实现
<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链接百度的网页,换成其他的控件也是一样的
GestureDetector在android开发中使用到比较的多了,我们下面一起来看一篇关于安卓开发使用GestureDetector手势滑动界面的例子,具体细节如下所示.用惯了苹果的人都知道在在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还有很多功能,有兴趣的可以继续研究
安卓开发之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下载(最新版)
再将得到的项目包,导入到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中的
解决办法:把demo-src目录下的build.gradle中的gradle插件版本改成你android studio所使用的版本(我使用的是1.5.0):
Java
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
123 dependencies { classpath 'com.android.tools.build:gradle:1.5.0'}
把demo-src/gradle/wrapper/gradle-wrapper.properties中的gradle版本改成android studio所使用的版本(我是用的最新的gradle版本,2.8):
Java
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
1 distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
然后”sync now”,就不会报这个错误了。
错误B:
这个错误是因为新浪weibo的sdk开发人员偷懒导致的,出错的原因都是在图片的 问题上,所以,我这里将其归为一种错误。
错误如下:
Error:Execution failed for task ‘:WeiboSDKDemo:mergeDebugResources’.
> Crunching Cruncher ic_login_button_blue_normal.9.png failed, see logs
其实,看编译错误,还是要看gradle console里的错误和警告,如下:
AAPT err(Facade for 1170324693): ERROR: 9-patch image C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\res\drawable\ic_login_button_blue_normal.9.png malformed.
AAPT err(Facade for 1170324693): Frame pixels must be either solid or transparent (not intermediate alphas).
AAPT err(Facade for 1170324693): Found at pixel #2 along top edge.
AAPT err(Facade for 1170324693): ERROR: 9-patch image C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\res\drawable\ic_login_button_blue_focused.9.png malformed.
AAPT err(Facade for 1170324693): Frame pixels must be either solid or transparent (not intermediate alphas).
AAPT err(Facade for 1170324693): Found at pixel #2 along top edge.
AAPT err(Facade for 576922613): libpng error: Not a PNG file
AAPT err(Facade for 735358242): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-mdpi-v4\ic_com_sina_weibo_sdk_login_with_text.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT err(Facade for 576922613): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-hdpi-v4\ic_com_sina_weibo_sdk_logo.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT err(Facade for 735358242): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-ldpi-v4\ic_com_sina_weibo_sdk_logo.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT err(Facade for 576922613): ERROR: 9-patch image C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\res\drawable\ic_login_button_blue_pressed.9.png malformed.
AAPT err(Facade for 706899532): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-xhdpi-v4\ic_com_sina_weibo_sdk_logo.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT err(Facade for 576922613): No marked region found along edge.
AAPT err(Facade for 576922613): Found along top edge.
AAPT err(Facade for 1615154168): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-ldpi-v4\ic_com_sina_weibo_sdk_login_with_text.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT err(Facade for 1561367387): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-mdpi-v4\ic_com_sina_weibo_sdk_logo.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
AAPT err(Facade for 1561367387): C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\build\intermediates\exploded-aar\demo-src\WeiboSDK\unspecified\res\drawable-hdpi-v4\ic_com_sina_weibo_sdk_login_with_text.png: libpng warning: iCCP: Not recognizing known sRGB profile that has been edited
上面的错误主要是两种(这里我忽略警告信息,因为警告不会导致编译失败。警告信息其实也是因为png的图片有问题,大家可以自行google原因和解决方法。):
1.AAPT err(Facade for 1170324693): ERROR: 9-patch image C:\Users\AlexY\Desktop\weibo_android_sdk-master\demo-src\WeiboSDKDemo\res\drawable\ic_login_button_blue_normal.9.png malformed.
AAPT err(Facade for 1170324693): Frame pixels must be either solid or transparent (not intermediate alphas).
AAPT err(Facade for 1170324693): Found at pixel #2 along top edge.
原因:报这个错,是因为WeiboSDKDemo中的图片有部分其实不是点9图片,只不过是改了后缀名。而前面说过,gradle编译要求高些,所以在eclipse中不会因为这个错误而编译失败,但是android studio却会导致失败。
解决办法:将所以提示不是点9图片的文件,使用android studio的点9图片编辑器,将其修复成点9图片。
2.AAPT err(Facade for 576922613): libpng error: Not a PNG file
原因:这个错误是因为,WeiboSDKDemo中的图片里有图片不是png格式的图片,而是jpg格式的图片,只不过是被新浪的开发人员的直接改成了 “.png”的后缀名,所以,android studio编译不通过。
解决办法:找到那个不是png格式的图片,windows系统貌似没有这个工具,即使是右键查看文件属性也是看不出的。所以,只能借助android studio的图片编辑器了,用android studio依次打开所有的.png文件,最终发现:/demo-src/WeiboSDKDemo/res/drawable/ic_share_music_thumb.png 并不是png格式的,而是jpg
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':WeiboSDK')
compile project(':WeiboSDK')
}
而WeiboSDK/libs下有support-v4.jar,所以导致提示support-v4包多次导入,导致编译失败。
解决办法:删除重复的一行,该称下面的样子:
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':WeiboSDK')
}
接着”sync now”,重新编译,就不会报这个错误了。
相关文章
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
- 这篇文章主要为大家详细介绍了js+css实现回到顶部按钮back to top回到顶部按钮,感兴趣的小伙伴们可以参考一下...2016-03-03
- 夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
- 深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
- 这篇文章主要介绍了iOS新版微信底部返回横条问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- java开发的Android应用,性能一直是一个大问题,,或许是Java语言本身比较消耗内存。本文我们来谈谈Android 性能优化之MemoryFile文件读写。 Android匿名共享内存对外A...2016-09-20
- TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
android.os.BinderProxy cannot be cast to com解决办法
本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20- 这篇文章主要介绍了Android 实现钉钉自动打卡功能的步骤,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下...2021-03-15
- 下面我们来看一篇关于Android 开发之布局细节对比:RTL模式 ,希望这篇文章对各位同学会带来帮助,具体的细节如下介绍。 前言 讲真,好久没写博客了,2016都过了一半了,赶紧...2016-10-02
- 首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
- 下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
- 这篇文章主要介绍了iOS新版微信底部工具栏遮挡问题完美解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-30
用Intel HAXM给Android模拟器Emulator加速
Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20- 在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20