精华内容
下载资源
问答
  • 安卓电视虚拟鼠标

    千次阅读 2018-03-27 14:41:14
    public class TcMouseManager implements TcMouseView.OnMouseListener{ public static final int KEYCODE_UP = KeyEvent.KEYCODE_DPAD_UP; public static final int KEYCODE_DOWN = KeyEvent.KEYCODE...


    public class TcMouseManager implements TcMouseView.OnMouseListener{
        
        public static final int KEYCODE_UP = KeyEvent.KEYCODE_DPAD_UP;
        
        public static final int KEYCODE_DOWN = KeyEvent.KEYCODE_DPAD_DOWN;
        
        public static final int KEYCODE_LEFT = KeyEvent.KEYCODE_DPAD_LEFT;
        
        public static final int KEYCODE_RIGHT = KeyEvent.KEYCODE_DPAD_RIGHT;
        
        public static final int KEYCODE_CENTER = KeyEvent.KEYCODE_DPAD_CENTER;
        
        
        
        public static int MOUSE_STARTX = 960;
        
        public static int MOUSE_STARTY = 540;
        
        public static int MOUSE_MOVE_STEP = 20;
        
        public static enum MoveStepSelect{  
            SLOW, NORMAL, FAST
        }

        public static final int MOUSE_TYPE = 0;
        
        private int mCurrentType;
        
        private ViewGroup mParentView;
        
        private TcMouseView mMouseView;
        
        private boolean isShowMouse = true;
        
        private boolean isKeyEventCousumed = false;
        
        private int mSpeed = 1;
        
        private Context mContext;
        
        private int  defTimes = 400;
        
        private int defMaxSpeed = 7;

        private final String TAG ="TcMouseManager";
        
        /**
         * When user presses a key, a timer is started, when it times out, it is
         * necessary to detect whether user still holds the key.
         */
        private volatile boolean mWaitForTouchUp = false;
        
        
        /**
         * Long press timer used to response long-press.
         */
        private LongPressTimer mLongPressTimer;
        
        private TimeoutDismissTimer mTimeoutDismissTimer;
     
        
        public TcMouseView.Direction CurDirection;
        
        public Activity mActivity;
        
        private UiController mUiController;    
        
        private int mKeyPressTimes = 0;
        
        private static final int WebViewScrollSteps = 40;
        
        private static TcMouseManager mTcMouseManager;
        
        public static TcMouseManager getInstance(Context context){
            if(mTcMouseManager == null){
                mTcMouseManager = new TcMouseManager(context);
            }
            return mTcMouseManager;
        }
        
        private TcMouseManager(Context context){
            
        }
        /**
         * @param parent
         * @param type
         */
        public void init(ViewGroup parentView, Activity myActivity,UiController myUiController,int type) {

            mParentView = parentView;
            mActivity = myActivity;
            mUiController = myUiController;
            mContext = parentView.getContext();
            mMouseView = new TcMouseView(mContext, this);
            mMouseView.setOnMouseListener(this);
            mCurrentType = type;
            WindowManager wm = (WindowManager) myActivity.getBaseContext()
                    .getSystemService(Context.WINDOW_SERVICE);

            int width = wm.getDefaultDisplay().getWidth();
            int height = wm.getDefaultDisplay().getHeight();
            
            MOUSE_STARTX = width/2;
            MOUSE_STARTY = height/2;
            mLongPressTimer =new LongPressTimer();
            mTimeoutDismissTimer = new TimeoutDismissTimer();
        }
        
        public void setMoveSteps(MoveStepSelect moveStep){
            if(moveStep == MoveStepSelect.FAST){
                MOUSE_MOVE_STEP = 30;
            }else if(moveStep == MoveStepSelect.NORMAL) {
                MOUSE_MOVE_STEP = 25;
            }else{
                MOUSE_MOVE_STEP = 20;
            }
        }
        /**
         * @return
         */
        public boolean isShowMouse() {
            
            return isShowMouse;
        }

        public void setShowMouse(boolean isMouse) {
            if(this.isShowMouse != isMouse) {
                this.isShowMouse = isMouse;
                if(isMouse) {
                    mMouseView.setVisibility(View.VISIBLE);
                } else {
                    mMouseView.setVisibility(View.GONE);
                }
                mMouseView.requestLayout();
            }
        }
        
        
        public void ScrollWebView(TcMouseView.Direction mDirection){
            WebView w = mUiController.getCurrentTopWebView();
            if (w == null)
            {
                return ;
            }
            BrowserWebView browserWebView = (BrowserWebView) w;
             Log.v(TAG,
             "   browserWebView.isScrollToTop() is " +
             browserWebView.isScrollToTop());
            if(mDirection == TcMouseView.Direction.UP){            
                if (!browserWebView.isScrollToTop()){
                    browserWebView.scrollBy(0, -WebViewScrollSteps);                
                }
            }else if(mDirection == TcMouseView.Direction.DOWN ){
                browserWebView.scrollBy(0, WebViewScrollSteps);
            }
        }
        /**
         * @return
         */
        public int getCurrentActivityType() {
            return mCurrentType;
        }

        /**
         * showmouse
         */
        public void showMouseView() {
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
            
            
            if(mMouseView != null) {
                mParentView.addView(mMouseView, lp);
            }
        }
        
        class TimeoutDismissTimer extends Handler implements Runnable{
            
            public static final int DISSMISS_TIMEOUT = 9000;
            
            public void startTimer(){
                postAtTime(this, SystemClock.uptimeMillis() + DISSMISS_TIMEOUT);
            }
            
            public boolean removeTimer(){
                removeCallbacks(this);
                return true;
            }
            
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                setShowMouse(false);
            }
            
        }

        class LongPressTimer extends Handler implements Runnable {
            /**
             * When user presses a key for a long time, the timeout interval to
             * generate first {@link #LONG_PRESS_KEYNUM1} key events.
             */
            public static final int LONG_PRESS_TIMEOUT1 = 450;

            /**
             * When user presses a key for a long time, after the first
             * {@link #LONG_PRESS_KEYNUM1} key events, this timeout interval will be
             * used.
             */
            private static final int LONG_PRESS_TIMEOUT2 = 50;

            /**
             * When user presses a key for a long time, after the first
             * {@link #LONG_PRESS_KEYNUM2} key events, this timeout interval will be
             * used.
             */
            private static final int LONG_PRESS_TIMEOUT3 = 50;

            /**
             * When user presses a key for a long time, after the first
             * {@link #LONG_PRESS_KEYNUM1} key events, timeout interval
             * {@link #LONG_PRESS_TIMEOUT2} will be used instead.
             */
            public static final int LONG_PRESS_KEYNUM1 = 1;

            /**
             * When user presses a key for a long time, after the first
             * {@link #LONG_PRESS_KEYNUM2} key events, timeout interval
             * {@link #LONG_PRESS_TIMEOUT3} will be used instead.
             */
            public static final int LONG_PRESS_KEYNUM2 = 3;

            //SkbContainer mSkbContainer;

            private int mResponseTimes = 0;

            public boolean isTimerStarted;

            public LongPressTimer() {

            }

            public void startTimer() {
                postAtTime(this, SystemClock.uptimeMillis() + LONG_PRESS_TIMEOUT1);
                mResponseTimes = 0;
                isTimerStarted=true;
            }
            public boolean IsTimerStarted(){
                return isTimerStarted;
            }
            public boolean removeTimer() {
                removeCallbacks(this);
                isTimerStarted=false;
                return true;
            }

            public void run() {
                if (mWaitForTouchUp) {
                    mResponseTimes++;
                    //responseKeyEvent(mSoftKeyDown);
                    mMouseView.moveMouse(CurDirection, 2);
                    long timeout;
                    if (mResponseTimes < LONG_PRESS_KEYNUM1) {
                        timeout = LONG_PRESS_TIMEOUT1;
                    } else if (mResponseTimes < LONG_PRESS_KEYNUM2) {
                        timeout = LONG_PRESS_TIMEOUT2;
                    } else {
                        timeout = LONG_PRESS_TIMEOUT3;
                    }
                    postAtTime(this, SystemClock.uptimeMillis() + timeout);

                }
            }
        }
        private long mLastEventTime;

        
        
        public boolean onDpadClicked(KeyEvent event) {
            
            if(!isShowMouse) {
                return false;
            }
            
            if(event.getKeyCode() == KEYCODE_CENTER) {
                dispatchKeyEventToMouse(event);
            } else {
                if(event.getAction() == KeyEvent.ACTION_DOWN) {

                    
                    dispatchKeyEventToMouse(event);
                    setShowMouse(true);
                    switch (event.getKeyCode())
                    {
                      case KeyEvent.KEYCODE_DPAD_UP:                      
                           CurDirection = TcMouseView.Direction.UP;
                           break;
                      case KeyEvent.KEYCODE_DPAD_DOWN:                      
                           CurDirection = TcMouseView.Direction.DOWN;
                           break;
                      case KeyEvent.KEYCODE_DPAD_LEFT:                       
                           CurDirection = TcMouseView.Direction.LEFT;
                           break;
                      case KeyEvent.KEYCODE_DPAD_RIGHT:                      
                           CurDirection = TcMouseView.Direction.RIGHT;
                           break;
                    }
                    mTimeoutDismissTimer.removeTimer();    
    //                if(!mLongPressTimer.IsTimerStarted()){
    //                  Log.d(TAG,"startTimer");
    //                  mLongPressTimer.startTimer();
    //              }
                    mWaitForTouchUp = true;
                    //isKeyEventCousumed = true;
                } else if(event.getAction() == KeyEvent.ACTION_UP) {
                    //if(!isKeyEventCousumed){
                    
    //                dispatchKeyEventToMouse(event);
    //                if(mLongPressTimer!=null){
    //                    mLongPressTimer.removeTimer();
    //                }
                        mWaitForTouchUp = false;
                        mTimeoutDismissTimer.startTimer();
                    //}
                    //isKeyEventCousumed = false;
                        
                        mKeyPressTimes = 0;
                        mSpeed = 1;
                }
            }
            return true;
        }

        private void dispatchKeyEventToMouse(KeyEvent event) {
            if(event.getKeyCode() == KEYCODE_CENTER) {
                mMouseView.onCenterButtonClicked(event);
            } else {
                if(mKeyPressTimes >= 2){
                       mSpeed = 2;
                   }
                  mKeyPressTimes++;
                switch (event.getKeyCode())
                {
                  case KeyEvent.KEYCODE_DPAD_UP:                
                       mMouseView.moveMouse(TcMouseView.Direction.UP, mSpeed);                  
                       CurDirection = TcMouseView.Direction.UP;
                       break;
                  case KeyEvent.KEYCODE_DPAD_DOWN:
                       mMouseView.moveMouse(TcMouseView.Direction.DOWN, mSpeed);
                       CurDirection = TcMouseView.Direction.DOWN;
                       break;
                  case KeyEvent.KEYCODE_DPAD_LEFT:
                       mMouseView.moveMouse(TcMouseView.Direction.LEFT, mSpeed);
                       CurDirection = TcMouseView.Direction.LEFT;
                       break;
                  case KeyEvent.KEYCODE_DPAD_RIGHT:
                       mMouseView.moveMouse(TcMouseView.Direction.RIGHT, mSpeed);
                       CurDirection = TcMouseView.Direction.RIGHT;
                       break;
                }
                
            }
        }
        
        public void sendCenterClickEvent(int x, int y, int action) {
            sendMotionEvent(x, y, action);
        }
        

        public void sendMouseHoverEvent(int downx, int downy) {
            sendMotionEvent(downx, downy, MotionEvent.ACTION_HOVER_MOVE);
        }

        private void sendMotionEvent(int x, int y, int action) {
            
            
            MotionEvent motionEvent = getMotionEvent( x, y ,action) ;

            Log.d(TAG,"sendMotionEvent");
            if(action == MotionEvent.ACTION_HOVER_MOVE) {
                motionEvent.setSource(InputDevice.SOURCE_CLASS_POINTER);
                mMouseView.dispatchGenericMotionEvent(motionEvent);
                //Instrumentation inst = new Instrumentation();
                //inst.sendPointerSync(motionEvent);
                //mParentView.dispatchGenericMotionEvent(motionEvent);
                
            } else {
                mParentView.dispatchTouchEvent(motionEvent);
                
                Log.d(TAG,"dispatchTouchEvent");
                //mMouseView.dispatchTouchEvent(motionEvent);
            }
        }

        private  MotionEvent getMotionEvent(int x, int y, int action) {
            // TODO Auto-generated method stub
            long downTime = SystemClock.uptimeMillis();
            long eventTime = SystemClock.uptimeMillis();
            int metaState = 0;
            return MotionEvent.obtain(
                    downTime,
                    eventTime,
                    action,
                    x,
                    y,
                    metaState
                    );
        }

        @Override
        public boolean onclick(View v, KeyEvent et) {
            if (isShowMouse()) {
                
                return onDpadClicked(et);
            }
            return mParentView.dispatchKeyEvent(et);
        }

    }

    ---------------------------------------下面是鼠标指针类--------------------


    package com.tcl.tvmouse;

    import com.tcl.browser.R;

    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.drawable.BitmapDrawable;
    import android.graphics.drawable.Drawable;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.FrameLayout;
    import android.widget.ImageView;
    import android.widget.ImageView.ScaleType;

    public class TcMouseView extends FrameLayout {
        
        private int mOffsetX;
        private int mOffsetY;
        
        private ImageView mMouseView;
        
        private Bitmap mMouseBitmap;
        
        private TcMouseManager mMouseManager ;
        
        private int mMouseX = TcMouseManager.MOUSE_STARTX;
        
        private int mMouseY = TcMouseManager.MOUSE_STARTY;
        
        private int mLastMouseX = mMouseX;
        
        private int mLastMouseY = mMouseY;
        
        private int mMoveDis =  TcMouseManager.MOUSE_MOVE_STEP;
        
           /*
         * move direction
         */
        public static enum Direction {  
              UP, DOWN, LEFT, RIGHT  
        }
        
        
        private OnMouseListener mOnMouseListener;

        public TcMouseView(Context context) {
            super(context);
        }
        
        public TcMouseView(Context context, TcMouseManager mMouseMrg) {
            super(context);
            init( mMouseMrg);
        }
        
        public OnMouseListener getOnMouseListener() {
            return mOnMouseListener;
        }

        public void setOnMouseListener(OnMouseListener mOnMouseListener) {
            this.mOnMouseListener = mOnMouseListener;
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            if (mMouseView != null && mMouseBitmap != null) {
                mMouseView.measure(MeasureSpec.makeMeasureSpec(mMouseBitmap.getWidth(), MeasureSpec.EXACTLY),
                        MeasureSpec.makeMeasureSpec(mMouseBitmap.getHeight(), MeasureSpec.EXACTLY));
            }
        }
        
        private void init(TcMouseManager manager) {
            mMouseManager  = manager;
            Drawable drawable =    getResources().getDrawable(
                    R.drawable.new_mouse);
            mMouseBitmap = drawableToBitamp(drawable);
            mMouseView = new ImageView(getContext());
            mMouseView.setImageBitmap(mMouseBitmap);
    //        mMouseView.setImageDrawable(drawable);
            addView(mMouseView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            mOffsetX = (int)((mMouseBitmap.getWidth()));
            mOffsetY = (int)((mMouseBitmap.getHeight()));
            mOffsetX = (int)((mMouseBitmap.getWidth())*30/84);
            mOffsetY = (int)((mMouseBitmap.getHeight())*10/97);
        }

        @Override
        protected void onLayout(boolean changed, int left, int top, int right,
                int bottom) {
            if(mMouseView != null) {
                mMouseView.layout(mMouseX, mMouseY, mMouseX + mMouseView.getMeasuredWidth(), mMouseY + mMouseView.getMeasuredHeight());
            }
        }

        

        private void scrollView(Direction direction) {
            if(mMouseManager .getCurrentActivityType() == TcMouseManager.MOUSE_TYPE) {
                mMouseManager.ScrollWebView(direction);
                /*
                    int pageScrollBy = 40;
                    if(direction == Direction.UP) {
                        pageScrollBy = - mMoveDis;
                    } else if (direction == Direction.DOWN) {
                        pageScrollBy = mMoveDis;
                    }
                    */
                //    this.dispatchKeyEvent(event)    ;    
            /* MainActivity.contentView.dispatchKeyEvent(event);*/
                
            }
        }

        public void onCenterButtonClicked(KeyEvent event) {
            mMouseManager .sendCenterClickEvent(mMouseX + mOffsetX, mMouseY + mOffsetY, event.getAction());//加一点偏移补�?
        }
        
        
        
         private Bitmap drawableToBitamp(Drawable drawable) {
            
             BitmapDrawable bd = (BitmapDrawable) drawable;
             Bitmap bitmap = bd.getBitmap();
             //更改鼠标的大小
             return Bitmap.createScaledBitmap(bitmap, 39, 50 ,true);
         }
        
        
        
         @Override    
         public boolean dispatchKeyEvent(KeyEvent event) {
                Log.i("dispatchKeyEvent",
                        "dispatchKeyEvent(), action=" + event.getAction() + " keycode="
                                + event.getKeyCode());
                switch (event.getKeyCode()) {
                case TcMouseManager.KEYCODE_UP:
                
                case TcMouseManager.KEYCODE_DOWN:
                    
                case TcMouseManager.KEYCODE_LEFT:
                    
                case TcMouseManager.KEYCODE_RIGHT:
                    
                case TcMouseManager.KEYCODE_CENTER:
                    
                    if (mOnMouseListener != null) {
                        
                        return mOnMouseListener.onclick(TcMouseView.this, event);
                    }
                    
                default:
                    break;
                }
                return super.dispatchKeyEvent(event);
                
            }
        
         public void moveMouse(Direction direction, int times) {
                Log.d("BdMainView", "wrapper moveMouse() ENTER");
                mMoveDis = times * TcMouseManager.MOUSE_MOVE_STEP;
                //mMoveDis = TcMouseManager.MOUSE_MOVE_STEP;
                switch(direction) {
                case UP:
                    if(mMouseY - mMoveDis >= 0) {
                        mMouseY = mMouseY - mMoveDis;
                    } else {
                        mMouseY = 0;
                        scrollView(direction);
                    }
                    break;
                case LEFT:
                    mMouseX = (mMouseX - mMoveDis > 0) ? mMouseX - mMoveDis : 0;
                    break;
                case DOWN:
                    if(mMouseY + mMoveDis < getMeasuredHeight() - mMoveDis) {
                        mMouseY = mMouseY + mMoveDis;
                    } else {
                        mMouseY = getMeasuredHeight() - 15;
                        scrollView(direction);
                    }
                    break;
                case RIGHT:
                    mMouseX = (mMouseX + mMoveDis < getMeasuredWidth() - mOffsetX) ? mMouseX + mMoveDis : getMeasuredWidth() - mOffsetX;
                    break;
                }
                if(mLastMouseX == mMouseX && mLastMouseY == mMouseY) {
                    return;
                }
                
                mLastMouseX = mMouseX;
                mLastMouseY = mMouseY;
                
                requestLayout();
                mMouseManager .sendMouseHoverEvent(mMouseX + mOffsetX, mMouseY + mOffsetY);
                
            }
        
         /**
             * @author liuyongkui
             *
             */
         public interface OnMouseListener {
            
             boolean onclick(View v, KeyEvent event);
            
            
         }
        
         @Override
        public boolean onInterceptTouchEvent(MotionEvent ev) {
            // TODO Auto-generated method stub
            return super.onInterceptTouchEvent(ev);
        }
            
        
    }


    展开全文
  • 电脑内存不足怎么办,虚拟内存能起到多大作用?我们可以看到下图网友反映"电脑内存有12GB内存,但是玩大型游戏的时候,经常弹出内存不足的窗口,导致游戏经常崩溃"。怎么回事呢?其实跟我们今天聊的话题很契合,物理...
    8751f5df4d6af11d77a8dac082a02e82.png

    电脑内存不足怎么办,虚拟内存能起到多大作用?我们可以看到下图网友反映"电脑内存有12GB内存,但是玩大型游戏的时候,经常弹出内存不足的窗口,导致游戏经常崩溃"。怎么回事呢?其实跟我们今天聊的话题很契合,物理内存和虚拟内存有什么区别?那么虚拟内存有什么作用呢?下面一起看下吧。

    b4e301ef9649584b4019906f502f8231.png

    电脑内存不足怎么办?

    1、首选电脑出现内存不足可能是长时间运行大量任务,比如同时打开多个软件或者页面,这样容易导致内存不足的情况,那么建议养成关闭不必要的任务,保证内存正常运作。

    2、有的用户电脑内存是4G,但是却安装了32位的系统,那么实际只能使用最大2G的内存,这样很容易出现内存不足的情况,建议安装64位的系统。

    3、有时候硬件不兼容也会导致内存不足的现象,特别是目前双内存卡槽,如果内存条的代数和频率不一致都会导致系统无法读取其中的内存。

    4、除了上述的原因,其实跟是否开启虚拟内存有很大关系,那么下面继续深入看下虚拟内存能起到多大作用?

    89cbcec15b27b46e3ad5dff6a723015f.png

    虚拟内存的作用

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

    说人话:比如你电脑只有2G内存,一个QQ占用400Mb内存,当你开了4个QQ的时候,基本内存已经爆满了。如果你这时候还想开个浏览器,系统会找到平时不干活的【虚拟内存】临时代替运行浏览器。

    特别是对于工作要求比较高的,比如视频剪辑、3D渲染、以及3D大型游戏等等。这时候虚拟内存完全可以胜任物理内存不能完成的工作,让系统更加稳定运行,起到必不可少的作用。反之,如果只是日常上网、登录QQ、写写Word文章,那么是否开启没有太大必要。

    fdbf9b0dfbfc488db92d539cfb171ede.png

    如何打开虚拟内存呢?

    如果你的系统是win8或者win10,那么恭喜你不用手动设置虚拟内存,系统默认开启自动分配,觉得太小也可以手动设置哦。

    如果你的系统是win7系统,那么就要手动设置虚拟内存了,下面如何正确配置虚拟内存吧。

    具体操作如下:

    1、鼠标右击此电脑(我的电脑),选择【属性】打开。

    cd4c09e27a8d74789baa5e25d8d16a16.png

    2、找到【高级系统设置】打开,在性能下方点击【设置】进入。

    d2b26542856a7a3ca5deae4d36bafc40.png

    3、性能选项界面,点击【高级】,虚拟内存下方点击【更改】,去掉勾选【自动管理所有驱动器的分页文件大小(A)】,勾选【自定义大小】,然后设置初始大小和最大值的内存。

    虚拟内存设置说明:

    虚拟内存设置大小一般应该为物理内存的1.5倍为好

    如果物理内存为1G,那虚拟内存应该设置为1.5G=1536MB

    如果物理内存为2G,那虚拟内存应该设置为3G=3072MB

    如果物理内存为4G,那虚拟内存应该设置为6G=6144MB

    2c861f0698d67c6c0491eef5f1bd6c88.png

    以上就是关于电脑内存不足解决方案以及设置虚拟内存的作用,你学会了吗?如果你有更专业的解答欢迎评论区留言,我是小白系统,带你学习更多的电脑小技巧,我们下期再见!

    展开全文
  • 比如下面1万以上配置的电脑却少有人拿虚拟内存做对比,Boos对虚拟内存的看法是,比如,硬件内存是4G,那么虚拟内存可以设置最小6G。意味着当我们要运行大型游戏、或者大型设计软件的时候,虚拟内存6G起到关键...
    23bd6a438cb39569c60117c6cc251a1d.gif

    从计算机诞生那日起,内存一直备受用户的关注!特别是win10系统带来的不只是系统的升级,跟着来的是硬件设备的更新迭代。

    从最近20年的发展,内存从512Mb到,现在的常见的8G,顶配的有64G以上。

    比如下面1万以上配置的电脑

    875fb27b224ba760a2637c24d0738f2a.png

    却少有人拿虚拟内存做对比,Boos虚拟内存的看法是,比如,硬件内存是4G,那么虚拟内存可以设置最小6G。

    18ad9e20b64a98e24428a89f916a2246.gif

    意味着当我们要运行大型游戏、或者大型设计软件的时候,虚拟内存6G起到关键的提升。如果没有设置虚拟内存,游戏分分钟上不去!

    29e52e4f75795ca77da94f6addaa5dae.gif

    下面重新认识下虚拟内存

    7d0a5a20298a1bc7d6bc197b3dbf6a78.png

    什么是虚拟内存?

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

    说人话:比如你电脑只有2G内存,一个QQ占用400Mb内存,当你开了4个QQ的时候,基本内存已经爆满了。

    如果你这时候还想开个浏览器,系统会找到平时不干活的虚拟内存临时代替运行浏览器。

    7e646bb601b931575fbddfcd37de38ac.png

    内存大就不需要虚拟内存吗?

    内存大确实可以完全胜任日常的系统运作,但是千万别小看虚拟内存,因为虚拟内存并不是内存的备胎那么简单。

    但我们的系统运行比较吃内存的程序的时候,特别是视频剪辑、3D渲染,3D大型游戏等等。这时候虚拟内存完全可以胜任物理内存不能完成的工作,让系统更加稳定运行,起到必不可少的作用。

    凡事都有例外,当你日常只是浏览网页、上网看剧、Office办公等,是否开启已经不太重要。

    那么,电脑4G内存、或者8G以上,win7/win10的系统该设置多大的虚拟内存呢?

    73cd4d5ffff751d481e26d223be852ef.png

    如何正确配置虚拟内存呢?

    其实从win8系统开始到现在的win10系统,虚拟内存已经由Windows来自动分配管理,系统能根据实际的内存使用情况,将动态调整虚拟内存的大小。

    如果想要手动设置虚拟内存,那么我们如何去设置呢?

    6df99d9f4bca605cf09ab3c5b8bbd01f.png

    win10系统设置虚拟内存的方法

    Boos电脑 win10家庭版 1803

    >>>>

    步骤1:鼠标右键【此电脑】,点击属性,如下图:

    6ccd9a015638263116cb5adbad4045ff.png

    >>>>

    步骤2:出现的系统界面,点击【高级系统设置】,如下图:

    c3dc257943cc6a9c95afbd0c59c1013f.png

    >>>>

    步骤3:高级菜单下,选择性能,点击【设置】,如下图:

    c751d9ef4859a911e52a5d0c636e54a9.png

    >>>>

    步骤4:选择【高级】,虚拟内存下,选择【更改】,如下图:

    e9ad5edf0126bf69e661175f107123e7.png

    >>>>

    注意:Win10默认是自动分配虚拟内存的,一般不建议大家手动修改。下图所示:

    6e2c826d1b48b18810c2baadc1de0e41.png

    >>>>

    步骤5:如果手动更改,下图去掉勾选【自动管理所有驱动的分页文件大小】,勾选【自定义大小】,手动输入初始大小和最大值。

    b68ec10f7f98079d68a059b21a5fcd22.png

    虚拟内存设置说明:

    虚拟内存设置大小一般应该为物理内存的1.5倍为好

    如果物理内存为1G,那虚拟内存应该设置为1.5G=1536MB

    如果物理内存为2G,那虚拟内存应该设置为3G=3072MB

    如果物理内存为4G,那虚拟内存应该设置为6G=6144MB

    d06d2e28c95294530ab5d81a2367cc31.gif

    总结

    Boos想告诉你win10系统已经默认开启虚拟内存,别以为大内存就不用虚拟内存,微软已经帮您优化好了,即使你的内存占用高达90%,你丝毫不会觉得卡,但是换成win7系统的话,你的电脑早挂掉。别不相信,你可以关闭虚拟内存测试下,保证回来找我。

    对于虚拟内存有什么看法,都可以留言探讨哦!

    展开全文
  • 学生代表:STUDENT REPRESENTATIVE|2018级虚拟空间设计专业王雨禾此次编程课程的学习,让我受益匪浅,短短八周的时间,使我进一步加深了对自身专业的了解,也启发了我,提供给我一种新的创作方式和新的创作表现形式...

    79f8773a2194391152cc062ce9cb7e36.png

    学生代表:STUDENT REPRESENTATIVE

     |2018级虚拟空间设计专业  王雨禾

    此次编程课程的学习,让我受益匪浅,短短八周的时间,使我进一步加深了对自身专业的了解,也启发了我,提供给我一种新的创作方式和新的创作表现形式,也为我之后的学习创作提供了新的支持力。

    ff43d34a89258c42663ee4628bc7b3f9.png

    1

    Q虚拟空间专业课程的体验如何?对哪些课程印象深刻?

    A

    编程就是计算机语言,学习编程对我来说就像在学一门新的语言,感觉自己和电脑之间建立了联系,开启了我很多新的认知,使我觉得机器也变得不冰冷了。

    跟单纯的绘画相比,编程打破了我以往对艺术的认知,给我提供了更多的可能性,让艺术不再停留在纸笔上,而是拥有了更多的表达形式与表达空间,我觉得编程是一门非常实用又灵活的课程。

    2

    Q在完成课程作业时遇到过哪些难题?是如何找到解决思路的?

    A

    难题一是计算机本身很傻瓜,只要输入有一丝错误它就无法识别;二是需要全英文输入代码。

    所以做的过程中,一定要细心严谨、思路清晰,知道每一步在做什么,还要学好英语,遇到不懂的多查词典。

    要做好作业,我觉得更多的是需要灵活创新的思维。这门课程本身难度不大,大家学到的都是一样的最基本的公式,想要做的精彩就在于如何发挥想象、巧妙地利用和结合课程内容。另外就是课后的自学,课堂时间有限,不要局限于课上讲的内容,现在有很多书籍和网站都可以轻松查阅到拓展的编程知识。

    3

    Q请谈谈学习专业技术与提高艺术修养的关系。

    A

    我们专业是一个与科学手段相结合并且联系密切的数字艺术专业,学好专业技术才能使我们走在时代的前端,推陈出新。所以拥有前沿的技术是做出好的影像作品必不可少的前提。同样,只有掌握了新的技术,才能拥有更多的发挥可能,为艺术打开更广阔的创作空间。

    ff43d34a89258c42663ee4628bc7b3f9.png

    作品展示

    WORKS SHOW


    NO.1//

    9c79fe55154c315130d39176cef1dace.png

    用基础的多边形、方形、圆形拼成冻出鼻涕小动物插画,没有任何复杂的操作~运用一下绘画思路不停地堆积图形就可以做出有意思的画面~

    NO.2//

    在第一次的作业要求上做了动态的处理~画面大部分是用最基础的圆和方块组成,尽量用所学的简单的方法拼出丰富的图形。在动效上,用匀速运动做了流星,加速度运动做了跳动的小猫,让整个画面灵动起来。

    NO.3//

    这个作业想传达的是一种恐惧的情绪,我就用灰暗色调处理了整个画面。除了画面远处的树等一些简单图形用了最基本的圆和方在编程软件里画完,其他的复杂图形是用ps画好后导入图像进来。最后加入了一点简单的交互:用鼠标按键控制的方法控制小人,当鼠标点击时,小人受到惊吓会哭泣。

    NO.4//

    一个小水母寻宝的游戏~游戏程序并不难,在最基础的躲避障碍物上做的更改。最麻烦的地方在于游戏的视觉,因为要用到的图案很多,基本是用PS一个个画出来导进编程里。游戏规则就是小水母碰到障碍物时血条会减少,当血条空掉后会弹出“You lost”的页面,在规定血条里躲避各种障碍物后到达终点收获一颗珍珠就会胜利~

    NO.5//

    猫猫手绘板,主要是用键盘控制画笔类型,鼠标控制位置。界面里的每一个字母代表键盘上的按键,按下后会出现相应的笔刷,除了各种类型的笔刷外,还有放大缩小、擦除、清除、换颜色的基本功能。手绘板的特色在于可以画出不同种类的猫猫,左上角的按键可以给它们佩戴不同的饰品,就像一个猫猫生成器的小游戏一样,右下角的猫爪里也有不同的纹理,堆加在一起可以做出好看的花纹~

    NO.6//

    原图是一张海洋中的鲸鱼,我将画面切分成七个部分,每个放上不同的抽象处理,最后形成了一个构成感的蓝色动态抽象画。主要用到的是图像像素点的代替操作和马赛克两种基本方法,并用图像染色技术加入了一些小的变化,将这些基本方程里的参数修改一下,就会出现不同的效果,把它们拼凑在一起后,画面会变得丰富许多。

    NO.7//

    最后是用粒子拼成的一段抽象运动图形,这个作业因为用到的变化比较多,难度较大,需要去网上查找资料。我选取了课上所学的加速度运动和基础粒子与网上搜集到的两个比较直观的粒子公式,对它们做了许多参数修改的变换,试出了十几个在运动和视觉上比较有特色的画面,最终导出成视频剪辑在一起,配上音乐做出了一个随旋律变换的粒子视频。只要在过程中多尝试去修改公式,就会出现意想不到的画面结果。


    dab6ec99d58a8cc3ae4e86ae9369b7c8.gif

    结语

    EPILOGUE

    e9b6096bfe9a7afb988cc65896346612.png

    感谢各位的耐心观看,这次展示的作品并不是十分完美,仍有进一步提高的空间,各位能观看到此处已是对我莫大的支持,大家有什么疑问或者有什么建议,欢迎在评论区中评论,我们可以共同探究、共同评论。

    再次感谢各位!

    f66c95dd0a9cbfce0b7ade615059f0ed.png

    图文排版:冀子蒙

    文字编辑:刘奕君

    汤缔商

    审核:薄一航老师

    刘乐老师


    4b63b8f8e3b2c262433deb92532fb175.gif

    扫码关注北京电影学院美术学院官方公众号

    不定时更新美院最新动态

    a1bc48cac2752472a2e71a5dba72ebb8.pngf956b99a5584d0bbb586377f3d4ee647.png

    展开全文
  • 电视端虚拟鼠标的设计

    千次阅读 2018-03-24 11:51:49
    下面是虚拟鼠标控制的java代码SimMouse.java/** * native tool for browser */public class SimMouse { //private static final String LOGTAG = "BrowserUtil"; public static boolean mToo...
  • 一直以来就有一种想法,就是自己写一个APP将安卓手机模拟成鼠标/键盘,应急的时候可以用来代替鼠标/键盘。之前也在国内外的网站上找了各种方案,但是这些方案不是很好,直到谷歌发布的API28后终于有了很好的解决方案...
  • Android自动化测试13转帖请注明出处!谢谢安卓仿真器/模拟器介绍仿真器或模拟器为应用程序的开发者提供了很多开发和测试的便利。因为安卓系统开放的特性,因此市面上有许多安卓模拟器,归结起来实际上安卓模拟器只有...
  • 突然遇到win10系统安卓模拟器使用的问题就不知道该怎么办了,其实设置win10系统安卓模拟器使用的方法非常简单,按照1、开启 Hyper-V 虚拟化技术(已经开启的无视):选中控制面板->卸载程序->启动或关闭Windows...
  • 很多朋友都已经购买了Windows 8乃至Windows 10平板,Win平板的功能之强大,是安卓和iOS平板暂时难以相提并论的。不过另一方面,虽然微软为触摸操作做了很多努力,但Win系统中的一些软件仍未能很好地支持触摸屏——光...
  • Android模拟鼠标

    千次阅读 2013-01-10 14:20:53
    网上有很多成功的范例,此文不再累述,下面着重介绍一下发送键盘鼠标模拟事件的代码:  发送键盘 KeyCode :  步骤 1. 声明类 handler 变量   private static Handler handler;  步骤 2. 循环处理...
  • 我发现今年总会遇到一些邪门的事儿,比如说“鼠标坏”这种好几年都没发生过的烦心事儿就让俺赶上了。不得不说对于小编这种没了网络就活不了的人来讲,没有了鼠标几乎意味着啥事儿都干不成,尤其当你在准备一份重要...
  • 这是移动测试的一个重要章节,因为这将教会我们如何使用Android Emulator或AVD Manager创建Android虚拟设备,该设备 在手动移动测试和使用Appium的移动自动化期间使用。但在继续这一长篇章之前,有必要了解仿真器,...
  • #include "handle.h" Handle::Handle(QWidget *...android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target RESOURCES += \ pic.qrc 注意必须加: CONFIG += c++11
  • 文/东方亦落近日,Facebook Reality Labs为虚拟现实体验开发了一种名为“PinchType”的输入法。主要依靠手部追踪,将不同字母输入固定分配给特定手指动作,例如将拇指与一根手指并拢时,用户即可选择与并拢手指对应...
  • 最极客最具极客精神的新媒体近日,Facebook Reality Labs为虚拟现实体验开发了一种名为“PinchType”的输入法。主要依靠手部追踪,将不同字母输入固定分配给特定手指动作,例如将拇指与一根手指并拢时,用户即可选择...
  • 实现了android手机鼠标通过蓝牙控制pc
  • Android->inputflinger:将鼠标操作模拟成触摸操作,修复部分应用不支持鼠标点击的问题
  • android_模拟鼠标指针demo

    热门讨论 2013-08-29 17:01:35
    android_模拟鼠标指针demo,可模拟鼠标在手机上移动
  • 不知道喜欢网游的小伙伴是否会遇到类似的情况:1...小编这几天一直在苦恼,想找一款游戏辅助工具,可狠的是自己的安卓手机还是vivo Xplay 6,曾经的游戏旗舰手机,对于一直更新的手游,已经有心无力,那么如何验证刚...
  • 要实现虚拟摇杆,首先应该自定义一个按钮,之所以要自定义按钮,是我没有在QT的QPushButton类中找到自带的move或者mousemove事件,虽然可以直接获取mouse的位置,但是这样的话就不方便实现两个以上的摇杆,所以还是...
  • 我的情况是Android Virtual Device Manager里的AVD Name里有数字,改成首字母大写,全字母的就好了。
  • Android 模拟事件onclick点击 并实现遥控器模模拟鼠标操作,遥控器变身成鼠标
  • 随着安卓手机硬件的不断发展,运行速度和性能越来越好,在手机上安装Windows不再是新鲜事。大多数人买了手机,几乎就只管开机关机,从不知道如何给自己的手机换系统。其实操作起来也很简单,按照教程很容易成功。给...
  • 最近常要在闲鱼上查找一些产品,但阿里早就将闲鱼 PC 网页版给阉割了,逼着用户...异次元曾推荐过不少,比如谷歌 Android Studio 开发模拟器、FydeOS、Android x86 以及有些年头的 Genymotion、BlueStacks (蓝叠)、A...
  • 逍遥安卓模拟器工作室版适用于广大中小型手游工作室用户,为用户打造了一个安卓模拟环境,拥有一键多开、键鼠智能操控、高清大屏、重力感应等功能,兼容了当下主流的安卓游戏以及软件,流畅不卡顿,给您带来在电脑上...
  • qt for android实现鼠标滚轮事件, 显示缩小或放大的倍数,为众多QT开发者提供可以在android环境中实现缩小,放大图片等
  • 创建安卓模拟器显示 虚拟三键   在 Android Virtual Devices Manager 中   选择 Device Definitions   在选择 Device 中任意选着一个设备然后点击右侧的 Edit... , 在弹出窗口中 Buttons部分 选Software ...
  • Android模拟屏幕鼠标

    千次阅读 2016-06-16 10:20:16
    Android系统下模拟鼠标键盘等输入设备,网络上资料非常多。但不少是人云亦云,甚至测试都不愿测试一下就抄上来了。这次写一点体会,当作抛砖引玉。 0. 背景知识: 众所周知,Android是将Framework架在Linux之...
  • 3.1设置Android虚拟设备(AVD)进行应用程序测试 问题 成功的应用必须在各种Android设备和版本上运行,因此您需要在各种设备上进行测试。 解 使用Android SDK的设备仿真工具包配置设备和操作系统的组合。对各种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,600
精华内容 3,440
关键字:

安卓虚拟鼠标