设为首页 加入收藏

TOP

Android中截图(surfaceView)源码(二)
2014-11-24 11:50:10 来源: 作者: 【 】 浏览:2
Tags:Android 截图 surfaceView 源码

{
Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
//在surfaceView上不停的绘图
doDraw(1, canvas);
File file = new File(mScreenshotPath + "/"
+ System.currentTimeMillis() + ".jpg");
FileOutputStream fos;
try
{
fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
}
catch (FileNotFoundException e)
{
Log.e("Panel", "FileNotFoundException", e);
}
catch (IOException e)
{
Log.e("Panel", "IOEception", e);
}
}
}


/**
* Helper method to ensure that the given path exists. TODO: check external
* storage state
*/
private boolean ensureSDCardAccess()
{
File file = new File(mScreenshotPath);
if (file.exists())
{
return true;
}
else if (file.mkdirs())
{
return true;
}
return false;
}
}


ScreenshotActivity.java


import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;


public class ScreenshotActivity extends Activity {
private Panel mPanel;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mPanel = new Panel(this);
setContentView(mPanel);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.screenshot:
mPanel.saveScreenshot();
break;
}
return true;
}
}


ViewThread.java


import android.graphics.Canvas;
import android.view.SurfaceHolder;


public class ViewThread extends Thread {
private Panel mPanel;
private SurfaceHolder mHolder;
private boolean mRun = false;
private long mStartTime;
private long mElapsed;

public ViewThread(Panel panel) {
mPanel = panel;
mHolder = mPanel.getHolder();
}

public void setRunning(boolean run) {
mRun = run;
}

@Override
public void run() {
Canvas canvas = null;
mStartTime = System.currentTimeMillis();
while (mRun) {
canvas = mHolder.lockCanvas();
if (canvas != null) {
mPanel.doDraw(mElapsed, canvas);
mElapsed = System.currentTimeMillis() - mStartTime;
mHolder.unlockCanvasAndPost(canvas);
}
mStartTime = System.currentTimeMillis();
}
}
}


其实这很好理解。由于我的代码写在整个项目中,跌出来比较麻烦,就贴了一个以可以完整通过的工程。


下载地址:


下载在Linux公社的1号FTP服务器里,下载地址:


密码:www.muu.cc


在 2012年LinuxIDC.com\7月\Android中截图(surfaceView)源码


下载方法见 http://www.linuxidc.net/thread-1187-1-1.html


关于截屏,暂时我的需求已经满足了,不知道这符合其他情况么?欢迎有兴趣的人一起交流。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇《俄罗斯方块游戏》项目实作【附.. 下一篇bash基础编程总结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)
·Java是什么?(通俗 (2025-12-26 11:19:49)
·雾里看花:真正意义 (2025-12-26 10:54:36)
·C++——模板(超详细 (2025-12-26 10:54:34)