Android的页面卷曲与网络流媒体图像? [英] Android page curl with images streaming from web?

查看:138
本文介绍了Android的页面卷曲与网络流媒体图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我使用 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 in OPENGL, 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆