Android的页面卷曲与网络流媒体图像? [英] Android page curl with images streaming from web?
问题描述
所以,我使用 https://github.com/harism/android_page_curl 的 ,该项目实现了卷曲功能来创建一本书。但我想,同时通过网页直接以异步方式串流影像,显然是为了达到相同的。
但后来我将需要 OpenGL中,进度条
的一样。但是,我没有任何知识 OPENGL
,所以,我怎么可以去调整这个code和实现我想要的功能。
另外,看看这个问题对于我想要达到更清晰的视野...
<一个href=\"http://stackoverflow.com/questions/10827745/pagecurlmagazine-with-image-from-web\">PageCurl(magazine)从网络图片
包fi.harism.curl;
公共类CurlActivity延伸活动{ 私人CurlView mCurlView;
按钮BTN;
私人AQuery水溶液;
可绘制D = NULL;
TextView的多行文字;
清单&LT;串GT;数据;
MediaPlayer的MPLAYER; @覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 的setContentView(R.layout.main); INT索引= 0;
如果(getLastNonConfigurationInstance()!= NULL){
指数=(整数)getLastNonConfigurationInstance();
} mCurlView =(CurlView)findViewById(R.id.curl);
mCurlView.setPageProvider(新PageProvider());
mCurlView.setSizeChangedObserver(新SizeChangedObserver());
mCurlView.setCurrentIndex(索引);
mCurlView.setBackgroundColor(Color.GREEN);
} @覆盖
公共无效的onPause(){
super.onPause();
mCurlView.onPause();
} @覆盖
公共无效onResume(){
super.onResume();
mCurlView.onResume();
} @覆盖
公共对象onRetainNonConfigurationInstance(){
返回mCurlView.getCurrentIndex();
} / **
*位图提供商。
* /
私有类PageProvider实现CurlView.PageProvider { 私有String [] = mBitmapStrings {http://myserver.com/image/img%20p1.png
http://myserver.com/image/img%20p2.png
http://myserver.com/image/img%20p3.png
http://myserver.com/image/img%20p4.png}; @覆盖
公众诠释getPageCount(){
返回mBitmapStrings.length;
}
私人位图loadBitmap(INT宽度,高度INT,INT指数)抛出MalformedURLException的,IOException异常{
位图B = Bitmap.createBitmap(宽度,高度,
Bitmap.Config.ARGB_8888);
b.eraseColor(0xFFFFFFFF的);
帆布C =新的Canvas(B); 如果(指数== mBitmapStrings.length)
{
索引= 0;
} 可绘制D =新BitmapDrawable(drawable_from_url(mBitmapStrings [指数])); INT保证金= 7;
INT边界= 3;
矩形R =新的矩形(保证金,保证金,宽度 - 缘,高度 - 边距); INT imageWidth = r.width() - (境* 2);
INT imageHeight = imageWidth * d.getIntrinsicHeight()
/ d.getIntrinsicWidth();
如果(imageHeight&GT; r.height() - (境* 2)){
imageHeight = r.height() - (境* 2);
imageWidth = imageHeight * d.getIntrinsicWidth()
/ d.getIntrinsicHeight();
} r.left + =((r.width() - imageWidth)/ 2) - 边界;
r.right = r.left + imageWidth +边框+边框;
r.top + =((r.height() - imageHeight)/ 2) - 边界;
r.bottom = r.top + imageHeight +边框+边框; 涂料P =新的油漆();
p.setColor(0xFFC0C0C0);
c.drawRect(R,P);
r.left + =接壤;
r.right - =接壤;
r.top + =接壤;
r.bottom - =接壤; d.setBounds(R);
d.draw(C); 返回b;
} @覆盖
公共无效的updatePage(CurlPage页,诠释的宽度,高度INT,INT指数){ 位图前;
尝试{
前面= loadBitmap(宽度,高度,指数);
page.setTexture(前,CurlPage.SIDE_FRONT);
page.setColor(Color.rgb(180,180,180),CurlPage.SIDE_BACK);
}赶上(MalformedURLException的E){
// TODO自动生成catch块
e.printStackTrace();
}赶上(IOException异常五){
// TODO自动生成catch块
e.printStackTrace();
}
}
} / **
* CurlView大小变化的观察。
* /
私有类SizeChangedObserver实现CurlView.SizeChangedObserver {
@覆盖
公共无效onSizeChanged(INT W,INT高){
/ *如果(W&GT; H){
mCurlView.setViewMode(CurlView.SHOW_TWO_PAGES);
mCurlView.setMargins(.1F,.05f,.1F,.05f);
}其他{* /
mCurlView.setViewMode(CurlView.SHOW_ONE_PAGE);
//mCurlView.setMargins(.1f,.1F,.1F,.1F);
mCurlView.setMargins(0,0,0,0); //}
}
} 位图drawable_from_url(字符串URL)抛出java.net.MalformedURLException,java.io.IOException异常{
位图X; HttpURLConnection的连接=(HttpURLConnection类)新的URL(网址).openConnection();
connection.setRequestProperty(用户代理,Mozilla的/ 4.0); connection.connect();
输入的InputStream = connection.getInputStream(); X = BitmapFactory.de codeStream(输入);
返回X;
}
}
---- ----编辑
另外,我使用Android系统查询库异步图像/文件
加载。难道是在的情况下,这个项目使用它可行
从网络流媒体图像。怎么样?
块引用>解决方案公共类CurlActivity延伸活动{ 私人CurlView mCurlView;
位图ÿ;
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main); INT索引= 0;
如果(getLastNonConfigurationInstance()!= NULL){
指数=(整数)getLastNonConfigurationInstance();
}
mCurlView =(CurlView)findViewById(R.id.curl);
mCurlView.setPageProvider(新PageProvider());
mCurlView.setSizeChangedObserver(新SizeChangedObserver());
mCurlView.setCurrentIndex(索引);
mCurlView.setBackgroundColor(0xFF202830);
} @覆盖
公共无效的onPause(){
super.onPause();
mCurlView.onPause();
} @覆盖
公共无效onResume(){
super.onResume();
mCurlView.onResume();
} @覆盖
公共对象onRetainNonConfigurationInstance(){
返回mCurlView.getCurrentIndex();
} / **
*位图提供商。
* /
私有类PageProvider实现CurlView.PageProvider { //位图资源。
/ *私人诠释[] = mBitmapIds {R.drawable.obama,R.drawable.road_rage,
R.drawable.taipei_101,R.drawable.world}; * /
私有String [] = mBitmapIds {您的网址,您的网址,
你urlg,您的网址}; //你的形象网址 @覆盖
公众诠释getPageCount(){
返回5;
} 私人位图loadBitmap(INT宽度,高度INT,INT指数){
位图B = Bitmap.createBitmap(宽度,高度,
Bitmap.Config.ARGB_8888);
b.eraseColor(0xFFFFFFFF的);
帆布C =新的Canvas(B);
//乌里URL = Uri.parse(http://stackoverflow.com);
//绘制对象D = getResources()getDrawable(URL);
//绘制对象D = getResources()getDrawable(mBitmapIds [指数])。
尝试{
drawableFromUrl(mBitmapIds [指数]);
}赶上(IOException异常五){
// TODO自动生成catch块
e.printStackTrace();
}
可绘制D =新BitmapDrawable(getResources(),Y);
//绘制对象D =新BitmapDrawable(drawable_from_url(Y));
INT保证金= 7;
INT边界= 3;
矩形R =新的矩形(保证金,保证金,宽度 - 缘,高度 - 边距); INT imageWidth = r.width() - (境* 2);
INT imageHeight = imageWidth * d.getIntrinsicHeight()
/ d.getIntrinsicWidth();
如果(imageHeight&GT; r.height() - (境* 2)){
imageHeight = r.height() - (境* 2);
imageWidth = imageHeight * d.getIntrinsicWidth()
/ d.getIntrinsicHeight();
} r.left + =((r.width() - imageWidth)/ 2) - 边界;
r.right = r.left + imageWidth +边框+边框;
r.top + =((r.height() - imageHeight)/ 2) - 边界;
r.bottom = r.top + imageHeight +边框+边框; 涂料P =新的油漆();
p.setColor(0xFFC0C0C0);
c.drawRect(R,P);
r.left + =接壤;
r.right - =接壤;
r.top + =接壤;
r.bottom - =接壤; d.setBounds(R);
d.draw(C); 返回b;
} @覆盖
公共无效的updatePage(CurlPage页,诠释的宽度,高度INT,INT指数){ 开关(指数){
//第一种情况是图像上的前侧,纯色回来。
情况下0:{
位图前方= loadBitmap(宽度,高度,0);
page.setTexture(前,CurlPage.SIDE_FRONT);
page.setColor(Color.rgb(180,180,180),CurlPage.SIDE_BACK);
打破;
}
//第二种情况是在后侧,纯色正面形象。
情况1: {
位图背部= loadBitmap(宽度,高度,2);
page.setTexture(背部,CurlPage.SIDE_BACK);
page.setColor(Color.rgb(127,140,180),CurlPage.SIDE_FRONT);
打破;
}
//第三种情况是两边的图像。
案例2:{
位图前方= loadBitmap(宽度,高度,1);
位图背部= loadBitmap(宽度,高度,3);
page.setTexture(前,CurlPage.SIDE_FRONT);
page.setTexture(背部,CurlPage.SIDE_BACK);
打破;
}
//第四种情况是双方的图像 - 再加上他们都反对交融
//不同的颜色。
情况3:{
位图前方= loadBitmap(宽度,高度,2);
位图背部= loadBitmap(宽度,高度,1);
page.setTexture(前,CurlPage.SIDE_FRONT);
page.setTexture(背部,CurlPage.SIDE_BACK);
page.setColor(Color.argb(127,170,130,255),
CurlPage.SIDE_FRONT);
page.setColor(Color.rgb(255,190,150),CurlPage.SIDE_BACK);
打破;
}
//第五例是相同的图像被分配给正面和背面。在这
//场景只有一个纹理使用,并为双方共享。
情况4:
位图前方= loadBitmap(宽度,高度,0);
page.setTexture(前,CurlPage.SIDE_BOTH);
page.setColor(Color.argb(127,255,255,255),
CurlPage.SIDE_BACK);
打破;
}
} } / **
* CurlView大小变化的观察。
* /
私有类SizeChangedObserver实现CurlView.SizeChangedObserver {
@覆盖
公共无效onSizeChanged(INT W,INT高){
如果(并且R w; H){
mCurlView.setViewMode(CurlView.SHOW_TWO_PAGES);
mCurlView.setMargins(.1F,.05f,.1F,.05f);
}其他{
mCurlView.setViewMode(CurlView.SHOW_ONE_PAGE);
mCurlView.setMargins(.1F,.1F,.1F,.1F);
}
}
} 公共无效drawableFromUrl(字符串URL)抛出IOException
HttpURLConnection的连接=(HttpURLConnection类)新的URL(网址).openConnection();
connection.connect();
输入的InputStream = connection.getInputStream(); Y = BitmapFactory.de codeStream(输入); }
}So, I am using https://github.com/harism/android_page_curl , this project to achieve the curl functionality to create a book. But I want to achieve the same while streaming images from web directly, obviously in an asynchronous manner.
But then I would require an
OpenGL , progress bar
for the same. But I don't have any knowledge inOPENGL
, So how can I go about tweaking this code and achieve the functionality I want.Also , have a look at this question for more clear view of what I want to achieve...
PageCurl(magazine) with Image from web
package fi.harism.curl; public class CurlActivity extends Activity { private CurlView mCurlView; Button btn; private AQuery aq; Drawable d =null; TextView mText; List<String> data; MediaPlayer mPlayer; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); int index = 0; if (getLastNonConfigurationInstance() != null) { index = (Integer) getLastNonConfigurationInstance(); } mCurlView = (CurlView) findViewById(R.id.curl); mCurlView.setPageProvider(new PageProvider()); mCurlView.setSizeChangedObserver(new SizeChangedObserver()); mCurlView.setCurrentIndex(index); mCurlView.setBackgroundColor(Color.GREEN); } @Override public void onPause() { super.onPause(); mCurlView.onPause(); } @Override public void onResume() { super.onResume(); mCurlView.onResume(); } @Override public Object onRetainNonConfigurationInstance() { return mCurlView.getCurrentIndex(); } /** * Bitmap provider. */ private class PageProvider implements CurlView.PageProvider { private String[] mBitmapStrings={"http://myserver.com/image/img%20p1.png", "http://myserver.com/image/img%20p2.png", "http://myserver.com/image/img%20p3.png", "http://myserver.com/image/img%20p4.png"}; @Override public int getPageCount() { return mBitmapStrings.length; } private Bitmap loadBitmap(int width, int height, int index) throws MalformedURLException, IOException { Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); b.eraseColor(0xFFFFFFFF); Canvas c = new Canvas(b); if(index==mBitmapStrings.length) { index=0; } Drawable d = new BitmapDrawable(drawable_from_url(mBitmapStrings[index])); int margin = 7; int border = 3; Rect r = new Rect(margin, margin, width - margin, height - margin); int imageWidth = r.width() - (border * 2); int imageHeight = imageWidth * d.getIntrinsicHeight() / d.getIntrinsicWidth(); if (imageHeight > r.height() - (border * 2)) { imageHeight = r.height() - (border * 2); imageWidth = imageHeight * d.getIntrinsicWidth() / d.getIntrinsicHeight(); } r.left += ((r.width() - imageWidth) / 2) - border; r.right = r.left + imageWidth + border + border; r.top += ((r.height() - imageHeight) / 2) - border; r.bottom = r.top + imageHeight + border + border; Paint p = new Paint(); p.setColor(0xFFC0C0C0); c.drawRect(r, p); r.left += border; r.right -= border; r.top += border; r.bottom -= border; d.setBounds(r); d.draw(c); return b; } @Override public void updatePage(CurlPage page, int width, int height, int index) { Bitmap front; try { front = loadBitmap(width, height, index); page.setTexture(front, CurlPage.SIDE_FRONT); page.setColor(Color.rgb(180, 180, 180), CurlPage.SIDE_BACK); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * CurlView size changed observer. */ private class SizeChangedObserver implements CurlView.SizeChangedObserver { @Override public void onSizeChanged(int w, int h) { /*if (w > h) { mCurlView.setViewMode(CurlView.SHOW_TWO_PAGES); mCurlView.setMargins(.1f, .05f, .1f, .05f); } else {*/ mCurlView.setViewMode(CurlView.SHOW_ONE_PAGE); //mCurlView.setMargins(.1f, .1f, .1f, .1f); mCurlView.setMargins(0,0,0,0); //} } } Bitmap drawable_from_url(String url) throws java.net.MalformedURLException, java.io.IOException { Bitmap x; HttpURLConnection connection = (HttpURLConnection)new URL(url) .openConnection(); connection.setRequestProperty("User-agent","Mozilla/4.0"); connection.connect(); InputStream input = connection.getInputStream(); x = BitmapFactory.decodeStream(input); return x; } }
----Edit----
Also , I am using android-query library for asynchronous image/file loading. Would it be feasible to use it with this project in case of streaming images from web. How?
解决方案public class CurlActivity extends Activity { private CurlView mCurlView; Bitmap y; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); int index = 0; if (getLastNonConfigurationInstance() != null) { index = (Integer) getLastNonConfigurationInstance(); } mCurlView = (CurlView) findViewById(R.id.curl); mCurlView.setPageProvider(new PageProvider()); mCurlView.setSizeChangedObserver(new SizeChangedObserver()); mCurlView.setCurrentIndex(index); mCurlView.setBackgroundColor(0xFF202830); } @Override public void onPause() { super.onPause(); mCurlView.onPause(); } @Override public void onResume() { super.onResume(); mCurlView.onResume(); } @Override public Object onRetainNonConfigurationInstance() { return mCurlView.getCurrentIndex(); } /** * Bitmap provider. */ private class PageProvider implements CurlView.PageProvider { // Bitmap resources. /*private int[] mBitmapIds = { R.drawable.obama, R.drawable.road_rage, R.drawable.taipei_101, R.drawable.world };*/ private String[] mBitmapIds = {"your url","your url", "your urlg", "your url" }; //your image url @Override public int getPageCount() { return 5; } private Bitmap loadBitmap(int width, int height, int index) { Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); b.eraseColor(0xFFFFFFFF); Canvas c = new Canvas(b); //Uri url = Uri.parse("http://stackoverflow.com"); //Drawable d =getResources().getDrawable(url); //Drawable d = getResources().getDrawable(mBitmapIds[index]); try { drawableFromUrl(mBitmapIds[index]); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Drawable d = new BitmapDrawable(getResources(),y); //Drawable d = new BitmapDrawable(drawable_from_url(y)); int margin = 7; int border = 3; Rect r = new Rect(margin, margin, width - margin, height - margin); int imageWidth = r.width() - (border * 2); int imageHeight = imageWidth * d.getIntrinsicHeight() / d.getIntrinsicWidth(); if (imageHeight > r.height() - (border * 2)) { imageHeight = r.height() - (border * 2); imageWidth = imageHeight * d.getIntrinsicWidth() / d.getIntrinsicHeight(); } r.left += ((r.width() - imageWidth) / 2) - border; r.right = r.left + imageWidth + border + border; r.top += ((r.height() - imageHeight) / 2) - border; r.bottom = r.top + imageHeight + border + border; Paint p = new Paint(); p.setColor(0xFFC0C0C0); c.drawRect(r, p); r.left += border; r.right -= border; r.top += border; r.bottom -= border; d.setBounds(r); d.draw(c); return b; } @Override public void updatePage(CurlPage page, int width, int height, int index) { switch (index) { // First case is image on front side, solid colored back. case 0: { Bitmap front = loadBitmap(width, height, 0); page.setTexture(front, CurlPage.SIDE_FRONT); page.setColor(Color.rgb(180, 180, 180), CurlPage.SIDE_BACK); break; } // Second case is image on back side, solid colored front. case 1: { Bitmap back = loadBitmap(width, height, 2); page.setTexture(back, CurlPage.SIDE_BACK); page.setColor(Color.rgb(127, 140, 180), CurlPage.SIDE_FRONT); break; } // Third case is images on both sides. case 2: { Bitmap front = loadBitmap(width, height, 1); Bitmap back = loadBitmap(width, height, 3); page.setTexture(front, CurlPage.SIDE_FRONT); page.setTexture(back, CurlPage.SIDE_BACK); break; } // Fourth case is images on both sides - plus they are blend against // separate colors. case 3: { Bitmap front = loadBitmap(width, height, 2); Bitmap back = loadBitmap(width, height, 1); page.setTexture(front, CurlPage.SIDE_FRONT); page.setTexture(back, CurlPage.SIDE_BACK); page.setColor(Color.argb(127, 170, 130, 255), CurlPage.SIDE_FRONT); page.setColor(Color.rgb(255, 190, 150), CurlPage.SIDE_BACK); break; } // Fifth case is same image is assigned to front and back. In this // scenario only one texture is used and shared for both sides. case 4: Bitmap front = loadBitmap(width, height, 0); page.setTexture(front, CurlPage.SIDE_BOTH); page.setColor(Color.argb(127, 255, 255, 255), CurlPage.SIDE_BACK); break; } } } /** * CurlView size changed observer. */ private class SizeChangedObserver implements CurlView.SizeChangedObserver { @Override public void onSizeChanged(int w, int h) { if (w > h) { mCurlView.setViewMode(CurlView.SHOW_TWO_PAGES); mCurlView.setMargins(.1f, .05f, .1f, .05f); } else { mCurlView.setViewMode(CurlView.SHOW_ONE_PAGE); mCurlView.setMargins(.1f, .1f, .1f, .1f); } } } public void drawableFromUrl(String url) throws IOException { HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); connection.connect(); InputStream input = connection.getInputStream(); y = BitmapFactory.decodeStream(input); } }
这篇关于Android的页面卷曲与网络流媒体图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!