Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 为什么自定义视图不会失效?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 Android开发的菜鸟,我遇到了使视图无效的问题.我正在使用 this教程并没有实现它的问题.但是,当我更改视图的背景时,它仍然会响应,就像之前的背景仍然设置一样.换句话说,我更改了蒙版,但我的“touchview”类没有看到新的蒙版.我没有运气使用invalidate更新视图,我已经验证掩码实际上被重置为背景.任何帮助将不胜感激.

我的代码

@Override
public Boolean onMenuItemClick(com.actionbarsherlock.view.MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId())
    {
        case 1:   // id from the xml file
            if(ismalE){
                ismale=false;
                item.setIcon(R.drawable.male_icon);
                imageViewOriginal.setImageresource(R.drawable.woman_front);
                imageViewFlip.setImageresource(R.drawable.woman_BACk);
                if(isFrontView){
                    mymask.setBACkgroundresource(R.drawable.woman_front_mask); //Mask changed here
                }else{
                    mymask.setBACkgroundresource(R.drawable.woman_BACk_mask);  //Mask changed here
                }
            }else{
                ismale=true;
                item.setIcon(R.drawable.female_icon);
                imageViewOriginal.setImageresource(R.drawable.man_front);                   
                imageViewFlip.setImageresource(R.drawable.man_BACk);
                if(isFrontView){
                    mymask.setBACkgroundresource(R.drawable.man_front_mask); //Mask changed here
                }else{
                    mymask.setBACkgroundresource(R.drawable.man_BACk_mask);  //Mask changed here
                }

            }

            touchView.invalidate();
            infoView.invalidate();
            mymask.invalidate(); //Mask View Invalidated here

            return true;   // we handled the click,dont pass it up the chain

        case 2:   // id from the xml file
            if(isFrontView){
                isFrontView=false;
                if(ismalE){
                    mymask.setBACkgroundresource(R.drawable.man_BACk_mask); //Mask changed here
                }else{
                    mymask.setBACkgroundresource(R.drawable.woman_BACk_mask); //Mask changed here
                }
            }else{
                isFrontView=true;
                if(ismalE){
                    mymask.setBACkgroundresource(R.drawable.man_front_mask); //Mask changed here
                }else{
                    mymask.setBACkgroundresource(R.drawable.woman_front_mask); //Mask changed here
                }
            }
            FlipAnimator animator = new FlipAnimator(imageViewOriginal,imageViewFlip,imageViewFlip.getWidth() / 2,imageViewFlip.getHeight() / 2);
            if (imageViewOriginal.getVisibility() == View.GONE) {
                animator.reverse();
            }
            flipLayout.startAnimation(animator);

            touchView.invalidate();
            infoView.invalidate();
            mymask.invalidate();  //Mask View Invalidated here

            return true;
    }
    return false;
}

解决方法

我可以想到两种可能性:

选项1:您正在从非UI线程运行代码.在这种情况下,使用posTinvalidate()而不是invalidate()

选项2:您正在从UI线程运行代码.在这种情况下,我需要您发布更多代码.请记住,invalidate()是异步的,因为它只调度主线程事件队列中的重绘.这意味着仅当当前代码全部执行时才会执行重绘.

在这种情况下,如果某些内容阻止了您的UI-Thread,您可以使用AsyncTask或Runnable来执行您的任务.

大佬总结

以上是大佬教程为你收集整理的android – 为什么自定义视图不会失效?全部内容,希望文章能够帮你解决android – 为什么自定义视图不会失效?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。