您的位置:首页 > 移动开发 > Android开发

Android----给Ta惊喜,带音乐的动态相册

2016-09-08 19:46 330 查看
哈喽~博主我好不容易摊上了两天假期,来跟大家分享一些比较有意思的小应用。

今天给大家带来的是带音乐的、自动滚动的相册。

这里先给大家贴上个Demo吧。工程有点大,只能用度盘了~~~~(>_<)~~~~

链接:http://pan.baidu.com/s/1qXNwhhq 密码:jvt3

好,接下来我们开始一同制作。这里用到的知识点有:

  1.Service(服务,Android四大组件之一,用于跑一些不随Activity生、灭的程序,比如后台的一些功能:音乐播放、文件下载等)

  2.回调(因为我们或多或少地需要在Service里操作Activity里的内容,所以要用到回调)

  3.多线程(因为Android系统默认只有一个线程,那就是UI(主)线程,但我们让图片滚动显示的话,会需要一些延时效果,所以,我们要创建一个子线程,用于延时切换图片)。

话不多说了,开始吧!

我从GitHub上面找了一些动画效果,放在了我上面贴的Demo里的Effects文件夹中,将其复制到你们的工程里面就能直接用了。

还有,需要把这几句粘到你的Grandle:app文件的最后。添加一些工具。

dependencies {
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.github.sd6352051.niftydialogeffects:niftydialogeffects:1.0.0@aar'
}
首先,我们要创建一个Activity(layout布局文件里只有一个ImageView控件即可),用来做切换图片。

public class PhotoMoveActivity extends AppCompatActivity implements PhotoMoveService.StopImg{

//创建一个ImageView用于关联布局文件中的控件
private ImageView show;
//该布尔值变量用于判断点击事件,因为这里是点击屏幕就开始相片轮播,防止用户点击多次发生紊乱,这里限制一下
private Boolean click = false;
//用于判断图片是否轮播
private Boolean run = true;
//数组,存放的是图片
private int[] imgs = {R.mipmap.picture01,R.mipmap.picture02,R.mipmap.picture03,R.mipmap.picture04,
R.mipmap.picture05,R.mipmap.picture06,R.mipmap.picture07,R.mipmap.picture08,
R.mipmap.picture09,R.mipmap.picture12,R.mipmap.picture13,R.mipmap.picture14,R.mipmap.picture15};
//数组,存放的是各种动画效果
private Effectstype[] types={Effectstype.Fadein,Effectstype.Fall,Effectstype.Fliph,Effectstype.Flipv,
Effectstype.Newspager,Effectstype.RotateBottom,Effectstype.RotateLeft,Effectstype.Shake,
Effectstype.Sidefill,Effectstype.SlideBottom,Effectstype.Slideright,Effectstype.Slidetop,Effectstype.Slideleft,
Effectstype.Slit};
//用于获取子线程传过来的值,并在UI线程做出响应
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
start(msg.arg1,4000,msg.what);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo_move);
show = (ImageView) findViewById(R.id.show);
//监听屏幕中的ImageView控件被点击,开启服务,奏起音乐,并且调用子线程,开始轮播相册。
show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (click){
return;
}
click = true;
Intent intent = new Intent(PhotoMoveActivity.this,PhotoMoveService.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startService(intent);
start(6,4000,6);
PhotoMoveService.setMusicStop(PhotoMoveActivity.this);
new Thread(new ImgNext()).start();
}
});
}

//实现Service中接口的方法,用来停止轮播。
@Override
public void stop() {
run = false;
}

//子线程,用于循环轮播相册,每次循环,将参数传给显示图片的方法。
public class ImgNext implements Runnable{

@Override
public void run() {
int i = -1;
int which = -1;
Message message;
while (i<imgs.length&&run){
if (which == types.length-1){
which = -1;
}
if (i == imgs.length-1){
i = -1;
}
try {
Thread.sleep(5000);
message = new Message();
i++;
which++;
message.what = i;
message.arg1 = which;
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (!run){
message = new Message();
message.what = 10;
message.arg1 = 0;
handler.sendMessage(message);
}
}
}

//将图片放到ImageView,再给ImageView附加动画的方法
private void start(int which,int mDuration,int img) {
show.setImageResource(imgs
效果如下(截图水平有待提高- -、还请见谅):

[img]http://img.blog.csdn.net/20160908202323057?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" border="0" >







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息