项目中经常会出现多个自定义View,并且可能会多次且频繁的调用canvas进行绘制。当优化还是无法解决界面绘制时卡顿掉帧现象时,我们可以考虑用SurfaceView来解决。它继承自View类,但是内部实现了双buffer并且是在一个单独的线程中进行进行绘制最后再post
canvas到UI上。关于他的内部细节可以参考Android
SurfaceView双缓存机制以及Android SurfaceView 源码分析及使用

适配器模式(Adapter
Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放
mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。

“听说关注他的人都很酷”

2.1 闪屏问题

setBackgroundColor(Color.argb(0x00, 0, 0, 0));mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);//如果无法解决xml 中 自定义view 设置 android:background="#fff"

我们有一个 MediaPlayer 接口和一个实现了 MediaPlayer 接口的实体类
AudioPlayer。默认情况下,AudioPlayer 可以播放 mp3
格式的音频文件。我们还有另一个接口 AdvancedMediaPlayer 和实现了
AdvancedMediaPlayer 接口的实体类。该类可以播放 vlc 和 mp4
格式的文件。我们想要让 AudioPlayer
播放其他格式的音频文件。为了实现这个功能,我们需要创建一个实现了
MediaPlayer 接口的适配器类 MediaAdapter,并使用
AdvancedMediaPlayer 对象来播放所需的格式。AudioPlayer 使用适配器类
MediaAdapter
传递所需的音频类型,不需要知道能播放所需格式音频的实际类。AdapterPatternDemo,我们的演示类使用
AudioPlayer 类来播放各种格式。

图片 1

2.2 滑动时上下两边产生的黑线问题

android:layout_marginBottom="-xxdp"android:layout_marginTop="-xxdp"

图片 2适配器模式的
UML 图

最近有许多小伙伴咨询阳阳老师,怎么修理电脑?嗯,还很普遍的,好吧,阳阳老师总结了一个100%好用的攻略分享如下:

步骤 1为媒体播放器和更高级的媒体播放器创建接口。MediaPlayer.javapublic interface MediaPlayer { public void play(String audioType, String fileName);}AdvancedMediaPlayer.javapublic interface AdvancedMediaPlayer { public void playVlc(String fileName); public void playMp4(String fileName);}步骤 2创建实现了 AdvancedMediaPlayer 接口的实体类。VlcPlayer.javapublic class VlcPlayer implements AdvancedMediaPlayer{ @Override public void playVlc(String fileName) { System.out.println("Playing vlc file. Name: "+ fileName); } @Override public void playMp4(String fileName) { //什么也不做 }}Mp4Player.javapublic class Mp4Player implements AdvancedMediaPlayer{ @Override public void playVlc(String fileName) { //什么也不做 } @Override public void playMp4(String fileName) { System.out.println("Playing mp4 file. Name: "+ fileName); }}步骤 3创建实现了 MediaPlayer 接口的适配器类。MediaAdapter.javapublic class MediaAdapter implements MediaPlayer { AdvancedMediaPlayer advancedMusicPlayer; public MediaAdapter(String audioType){ if(audioType.equalsIgnoreCase{ advancedMusicPlayer = new VlcPlayer(); } else if (audioType.equalsIgnoreCase{ advancedMusicPlayer = new Mp4Player(); } } @Override public void play(String audioType, String fileName) { if(audioType.equalsIgnoreCase{ advancedMusicPlayer.playVlc; }else if(audioType.equalsIgnoreCase{ advancedMusicPlayer.playMp4; } }}步骤 4创建实现了 MediaPlayer 接口的实体类。AudioPlayer.javapublic class AudioPlayer implements MediaPlayer { MediaAdapter mediaAdapter; @Override public void play(String audioType, String fileName) { //播放 mp3 音乐文件的内置支持 if(audioType.equalsIgnoreCase{ System.out.println("Playing mp3 file. Name: "+ fileName); } //mediaAdapter 提供了播放其他文件格式的支持 else if(audioType.equalsIgnoreCase || audioType.equalsIgnoreCase{ mediaAdapter = new MediaAdapter(audioType); mediaAdapter.play(audioType, fileName); } else{ System.out.println("Invalid media. "+ audioType + " format not supported"); } } }步骤 5使用 AudioPlayer 来播放不同类型的音频格式。AdapterPatternDemo.javapublic class AdapterPatternDemo { public static void main(String[] args) { AudioPlayer audioPlayer = new AudioPlayer(); audioPlayer.play("mp3", "beyond the horizon.mp3"); audioPlayer.play("mp4", "alone.mp4"); audioPlayer.play("vlc", "far far away.vlc"); audioPlayer.play("avi", "mind me.avi"); }}步骤 6验证输出。Playing mp3 file. Name: beyond the horizon.mp3Playing mp4 file. Name: alone.mp4Playing vlc file. Name: far far away.vlcInvalid media. avi format not supported

一、不是自己的电脑

1、重启;

2、重启;

3、换一台电脑。

二、自己的Windows电脑

1、重启;

2、还没有解决吗?…好吧…那就把内存、显卡酱的部件拆下来,擦擦灰然后再装上2333

发表评论

电子邮件地址不会被公开。 必填项已用*标注