- 浏览: 1208025 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (353)
- java基础 (40)
- tapestry (16)
- gwt (14)
- ajax (7)
- linux (8)
- ubuntu (18)
- eclipse (6)
- dojo (2)
- javascript (7)
- maven (4)
- 日常生活 (29)
- web2.0 (2)
- jsonrpc (1)
- compass (1)
- lucene (0)
- spring (10)
- cluster (3)
- 数据结构 (2)
- sqlserver (1)
- tomcat (2)
- swing (1)
- servlet (1)
- hibernate (1)
- firefox (1)
- Java-Puzzlers (1)
- Wicket (2)
- mysql (10)
- windows (5)
- Webwork (1)
- struts2 (1)
- Seam (2)
- jboss (1)
- idea (6)
- 分布计算 (3)
- Python-Django (7)
- Hadoop (1)
- 工具 (3)
- Tokyo Tyrant (2)
- Comet (1)
- android (115)
- 音乐 (6)
- cxf (1)
- mqtt (1)
最新评论
-
hesai_vip:
学习了,感谢
gradlew wrapper使用下载到本地的gradle.zip文件安装。 -
imknown:
姚瑶大坏蛋 写道我也遇到了这个,用你这个方法,导致下拉刷新不起 ...
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug -
姚瑶大坏蛋:
我也遇到了这个,用你这个方法,导致下拉刷新不起作用了,你遇到过 ...
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug -
寐语者:
LeaderElection(String zookeeper ...
使用Zookeeper来为你的程序加上Leader Election的功能。 -
fyc0109:
博主, 安装了一部分还是报这个错误!FAILURE: Buil ...
gradlew wrapper使用下载到本地的gradle.zip文件安装。
如果当View tree很复杂,结构很深的时候, 使用动画的时候会发现即使开了硬件加速还是有些卡,这是因为android系统自带的动画是在UI线程来处理的, 而且每次需要重绘整个View tree,虽然你可以指定重新绘制的区域,不过这样比较麻烦,
SurfaceView中View的绘制不是在UI线程中,所以可以避免上面的问题。我们只要做到SurfaceView背景能够透明就行了。在需要的地方盖一层SurfaceView, 做动画时显示出来。下面是示例代码。
调用的activity
布局。
使SurfaceView透明是下面这几句
ZenClockSurface sfvTrack = (ZenClockSurface)findViewById(R.id.zenClockSurface1);
sfvTrack.setZOrderOnTop(true); // necessary
SurfaceHolder sfhTrack = sfvTrack.getHolder();
sfhTrack.setFormat(PixelFormat.TRANSLUCENT);
这句是清屏。 canvas.drawColor(0,android.graphics.PorterDuff.Mode.CLEAR);
SurfaceView中View的绘制不是在UI线程中,所以可以避免上面的问题。我们只要做到SurfaceView背景能够透明就行了。在需要的地方盖一层SurfaceView, 做动画时显示出来。下面是示例代码。
package com.example.myapp; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.PixelFormat; import android.graphics.Region; import android.util.AttributeSet; import android.view.Surface.OutOfResourcesException; import android.view.SurfaceHolder; import android.view.SurfaceView; public class ZenClockSurface extends SurfaceView implements SurfaceHolder.Callback { private DrawClock drawClock; public ZenClockSurface(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); getHolder().addCallback(this); } public ZenClockSurface(Context context) { super(context); getHolder().addCallback(this); } public ZenClockSurface(Context context, AttributeSet attrs) { super(context, attrs); getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { drawClock = new DrawClock(getHolder(), getResources()); drawClock.setRunning(true); drawClock.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { boolean retry = true; drawClock.setRunning(false); while (retry) { try { drawClock.join(); retry = false; } catch (InterruptedException e) { } } } class DrawClock extends Thread { private boolean runFlag = false; private SurfaceHolder surfaceHolder; private Bitmap picture; private Matrix matrix; private Paint painter; public DrawClock(SurfaceHolder surfaceHolder, Resources resources) { this.surfaceHolder = surfaceHolder; picture = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher); matrix = new Matrix(); this.painter = new Paint(); this.painter.setStyle(Paint.Style.FILL); this.painter.setAntiAlias(true); this.painter.setFilterBitmap(true); } public void setRunning(boolean run) { runFlag = run; } @Override public void run() { Canvas canvas; while (runFlag) { matrix.preRotate(1.0f, picture.getWidth() / 2, picture.getHeight() / 2); canvas = null; try { canvas = surfaceHolder.lockCanvas(null); synchronized (surfaceHolder) { float[] f = new float[9]; matrix.getValues(f); float y = f[Matrix.MTRANS_Y]; matrix.postTranslate(0, 10); canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR); canvas.drawBitmap(picture, matrix, this.painter); float[] f1 = new float[9]; matrix.getValues(f1); float y1 = f1[Matrix.MTRANS_Y]; if (y1 >= 800) { matrix.setTranslate(0, 0); } } } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (canvas != null) { surfaceHolder.unlockCanvasAndPost(canvas); } } } } } }
调用的activity
package com.example.myapp; import android.app.Activity; import android.graphics.PixelFormat; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.LinearLayout; import android.widget.ScrollView; public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ZenClockSurface sfvTrack = (ZenClockSurface)findViewById(R.id.zenClockSurface1); sfvTrack.setZOrderOnTop(true); // necessary SurfaceHolder sfhTrack = sfvTrack.getHolder(); sfhTrack.setFormat(PixelFormat.TRANSLUCENT); WebView webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://m.vip.com"); } }
布局。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/red" android:orientation="vertical" > <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/webview"></WebView> <com.example.myapp.ZenClockSurface android:id="@+id/zenClockSurface1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerHorizontal="true" android:layout_centerVertical="true"/> </RelativeLayout>
使SurfaceView透明是下面这几句
ZenClockSurface sfvTrack = (ZenClockSurface)findViewById(R.id.zenClockSurface1);
sfvTrack.setZOrderOnTop(true); // necessary
SurfaceHolder sfhTrack = sfvTrack.getHolder();
sfhTrack.setFormat(PixelFormat.TRANSLUCENT);
这句是清屏。 canvas.drawColor(0,android.graphics.PorterDuff.Mode.CLEAR);
- myapp.zip (45 KB)
- 下载次数: 113
发表评论
-
安卓各种长知识的技术文章,不断更新
2015-10-27 18:24 746http://blog.udinic.com/2015/09 ... -
发现一个android sdk更新神速的镜像
2015-09-02 11:26 879mirrors.dormforce.net:80 //(栋力无 ... -
gradle项目中怎么集中管理你的依赖库
2015-08-16 11:30 683项目结构 引用root --gradleScript ... -
使用Dexposed为你的安卓应用加上在线修复的能力。
2015-08-11 16:15 6084移动客户端应用相对于W ... -
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug
2015-08-02 00:15 17000在项目中使用了android-Ultra-Pull-To-Re ... -
android有质量的面试题
2015-03-17 14:31 872https://github.com/android-cn/i ... -
提高Android Studio的gradle编译速度。
2015-03-12 14:12 4365发现用Android Studio的make和直接使用comm ... -
gradlew wrapper使用下载到本地的gradle.zip文件安装。
2015-03-12 01:26 15354使用gradlew来build项目时,有时候老是需要下载gra ... -
gradlew wrapper设置代理下载gradle
2015-02-27 18:25 44891. HTTP Only Proxy configuratio ... -
认识mqtt
2015-01-30 11:43 1050http://www.hivemq.com/mqtt-esse ... -
Google的Android性能模式
2015-01-14 14:44 705http://www.infoq.com/cn/news/20 ... -
反对Fragment的理由,顺便叫你如果创建自己的自定义view
2014-12-18 17:08 1075下面这篇文章讲了反对Fragment的理由,顺便叫你如果创建自 ... -
获取status bar的高度
2014-12-16 19:52 1272public static int getStatus ... -
最新的appCompat support library中,actionbar的自定义view不能占用全部的宽度
2014-12-02 23:22 894<style name="AppTheme&q ... -
ScrollTricks实现StickHeader效果
2014-11-06 19:07 1075https://code.google.com/p/roman ... -
AppCompat v21 — Material Design for Pre-Lollipop Devices!
2014-10-23 11:03 835http://android-developers.blogs ... -
国内Android Sdk Manager不能更新的问题。
2014-09-15 15:49 912加hosts 引用203.208.46.146 dl.goo ... -
在Centos上安装android sdk遇到的问题。
2014-09-15 12:00 1348安装好android sdk后, 打包时老是会有下面的问题。 ... -
Android的一些制作图表按钮的工具
2014-09-09 16:36 1484Android Button Maker Android P ... -
DESIGNER'S GUIDE TO DPI
2014-08-29 14:37 431强烈建议美工看看, 对于移动app的多密度屏幕的支持 http ...
相关推荐
Android SurfaceView实现动画效果
基于android的SurfaceView实现人物动画的一个简单示例程序。
Android SurfaceView实现加载GIF动画
Android的SurfaceView实现图片缩放、滑动,网上资源不多,目前还有些问题,仅供参考。
android学习 SurfaceView实现人物动画,代码通过测试并且附有APK编译文件,可直接在手机上运行
AndroidApp中使用SurfaceView制作多线程动画的实例讲解.docx
安卓Android源码——安卓Android使用SurfaceView实现墨迹天气的风车效果.zip
SurfaceView与Canvas结合使用实现动画效果.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android使用SurfaceView实现墨迹天气的风车效果
一个使用SurfaceView的Demo
Android SurfaceView 实现实时显示摄像头视频,详见博客:https://blog.csdn.net/qq_30297763/article/details/90241102
本人Android小菜鸟一名,刚入行不久,最近自己学习SurfaceView,想做一些小游戏。在这里放上一个自己编写的“迷宫寻路”的Demo,用于记录学习心得,同时分享给大家。当然有很多地方我不知道用法是否合理,希望大家多...
Android中SurfaceView的使用
android使用双缓冲辨析及surfaceview使用例子
Android使用SurfaceView实现墨迹天气的风车效果.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android下使用SurfaceView播放视频文件,详细参见博客:http://www.cnblogs.com/plokmju/p/android_SurfaceView.html
这是在上网收集的,能够截取当前Activity中surfaceView中图片。本人亲测可以通过。
即使用SurfaceView实现自由手绘,功能包括颜色选择、画笔粗细、撤销重做、橡皮擦
Activity加载自定义的SurfaceView-> SurfaceView 构造器中启动线程A,循环改变SurfaceView的x,y坐标,当x,y坐标到某点时设渐显标志位picAlphaFlag为true -> Surface创建时即surfaceCreated中,启动线程B,循环根据...