文档章节

实现日语翻译酱(2)

Maxium_R
 Maxium_R
发布于 2015/10/16 10:46
字数 737
阅读 24
收藏 0

接上一篇博客,先上效果图

输入图片说明。 点击listview的item时弹出PopupWindow

我们先看PopupWindow的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:wheel="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    android:orientation="vertical"
    android:background="@android:color/background_light">



    <TextView
        android:id="@+id/text1"
        tools:text="789456"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:maxLines="3"
        android:textAppearance="@android:style/TextAppearance.Holo.Large" />

    <TextView
        android:id="@+id/text2"
        tools:text="789456"
        android:maxLines="3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@android:style/TextAppearance.Holo"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center_vertical"
        >


        <ImageView
            android:layout_weight="1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@android:drawable/ic_menu_share"/>
        <ImageView
            android:layout_weight="1"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@android:drawable/ic_menu_camera"/>
        <!--FrameLayout-->
        <FrameLayout 
            android:layout_weight="1"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:onClick="mc_play">
            <demo.gojapn.translationdemo.common.view.ProgressWheel
                android:id="@+id/progress_wheel"
                android:layout_width="80dp"
                android:layout_height="80dp"
                wheel:matProg_barColor="@color/colorAccent"
                wheel:matProg_fillRadius="false"
                wheel:matProg_linearProgress="false"
                wheel:matProg_barWidth="3dp"
                wheel:matProg_rimColor="#ededed"
                />
            <ImageView
                android:id="@+id/progress_wheel_src_in"
                android:layout_width="80dp"
                android:layout_height="80dp"
                android:src="@android:drawable/ic_media_play"
                android:scaleType="center"/>
        </FrameLayout>
    </LinearLayout>
</LinearLayout>

其中ProgressWheel项目可以查看这里>materialish-progress。 由于需要类似按钮效果,隐私折中的方法是使用Framelayout来实现按钮效果。同时初始化PopupWindow如下:

 private void initPop(){
       pop = new PopupWindow(this);
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        pop.setHeight(dip2px(this, 250));
        pop.setBackgroundDrawable(new BitmapDrawable());
        pop.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                if (service!= null){
                    service.stop();
                }
            }
        });
    }

其中service为我们播放音频的逻辑业务类。实现如下:

public class MediaPlayerService {

    private MediaPlayer player;

    private ProgressWheel wheel;
    private ImageView imgIn;
    private Thread thread ;
    private Handler mHandler = new Handler(){

        @Override
        public void dispatchMessage(Message msg) {
            if (wheel != null && player != null ){
                try {
                    wheel.setProgress(player.getCurrentPosition() *1.0f/ player.getDuration());
                } catch (Exception e) {
                    player.release();
                    player = null;
                    e.printStackTrace();
                }
            }
        }
    };

    public MediaPlayerService(Context c,@RawRes int id ) {
        //id为MP3 资源id,这边只是简单的实现功能,需要切换资源的话可以通过setter注入方式改变
        player  = MediaPlayer.create(c, id);
        if (player == null) {
            AssetFileDescriptor fileDesc =c. getResources().openRawResourceFd(id);
            if (fileDesc != null) {
                player = new MediaPlayer();
                try {
                     player.setDataSource(fileDesc.getFileDescriptor(), fileDesc.getStartOffset(), fileDesc.getLength());
                    fileDesc.close();
                } catch (IOException e) {
                   throw  new NullPointerException("ResId " +id +" not found");
                }
                if (player == null) {
                        throw  new NullPointerException("ResId " +id +" not found");
                }
            }
        }


        final AudioManager audioManager = (AudioManager)c. getSystemService(Context.AUDIO_SERVICE);
        if (audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) == 0) {
            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)/2 , 0);
        }

        player.setLooping(false);
        try {
            player.prepare();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                wheel.setProgress(1);
                 player.seekTo(0);
                player.pause();
                wheel.setProgress(0);
                imgIn.setImageResource(android.R.drawable.ic_media_play);
            }
        });
        final int milliseconds = 100;
        thread  =   new Thread(){ 
            @Override
            public void run(){
                while(true){ //每隔100毫秒检查状态。
                    try {
                        sleep(milliseconds);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    mHandler.sendEmptyMessage(0);
                }
            }
        };
        thread.start();
    }

    public void setWheel(ProgressWheel wheel) {
        this.wheel = wheel;

    }

    public void playOrPause() {
        if (player == null) return;
        if (player.isPlaying()){
            player.pause();
            imgIn.setImageResource(android.R.drawable.ic_media_play);
        }else {
            imgIn.setImageResource(android.R.drawable.ic_media_pause);
            player.start();
        }
    }


    public void release() {
        player.release();
        player = null;
        thread.interrupt();

    }

    public void stop() {
        if (player.isPlaying()){
            imgIn.setImageResource(android.R.drawable.ic_media_play);
            player.pause();
        }
    }

    public void setParentView(View view) {
        wheel = (ProgressWheel) view.findViewById(R.id.progress_wheel);
        imgIn = (ImageView) view.findViewById(R.id.progress_wheel_src_in);
    }
}

剩下的就是在activity中调用,大致如下:

  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    BaseEntity entity  = (BaseEntity) parent.getAdapter().getItem(position);
                    if (entity.getType() == BaseEntity.Type.TransSep) return;
                    showPopupView(entity,listView);
                }
            });
       private void showPopupView(BaseEntity entity,ListView listView) {

        View view = View.inflate(this,R.layout.pop_view,null);
        service.setParentView(view);
        TextView textView1 = (TextView) view.findViewById(R.id.text1);
        textView1.setText(entity.getContent_ch());
        textView1 = (TextView) view.findViewById(R.id.text2);
        textView1.setText("wdヲ「pqdkくぇd");

        pop.setFocusable(true);
        pop.setContentView(view);
        pop.showAtLocation(listView,Gravity.BOTTOM, 0, 0 );

    }
  public  void  mc_play(View v){
        //frameLayout的点击事件
        service.playOrPause();
    }

以上就实现了简单的播放和进度控制。

© 著作权归作者所有

共有 人打赏支持
Maxium_R
粉丝 2
博文 4
码字总数 1939
作品 0
无锡
程序员
跨平台的农历生日提醒软件--生日小助手

最新版为V3.2 设计理由:Ubuntu11.10下没有合适的农历生日提醒软件。 设计思路:将农历和公历都转化为下一个公历生日,然后排序,判断在某一范围内的生日信息。 描 述:生日小助手是一款基于...

匿名
2012/01/28
1K
0
Linux Deepin系统更新记录(2014-02-20)

今日,Linux Deepin 2013进行了系统更新推送,下面是系统更新解决的部分问题与软件更新情况,供大家参考。 Bug修复 0003037: 深度软件中心“网络应用”分类的“即时通讯”子类,滚动到底部出...

cxbii
2014/02/20
518
6
Twitter 将推出中文版

【搜狐IT消息】北京时间9月13日消息,来自国外媒体的消息,在全球活跃用户突破1亿这一里程碑后,总部位置旧金山的Twitter官方日前宣布 将在未来几周内新增5种语言,分别是印地语、菲律宾语、...

小卒过河
2011/09/13
1K
14
COBOL 编译器--GnuCOBOL

GnuCOBOL,之前称之为 OpenCOBOL,是 COBOL 编译器。 主要特性: 完全实现 COBOL,无缝集成 C 通过了超过 9700 NIST COBOL 85 测试套件和超过 500 个内部检测 可以直接访问所有 C 库,甚至是...

叶秀兰
2015/10/13
453
0
如何设计一个能用google翻译多语言的站点

很多时候,我们需要做一个多语言的站点,cosbeta认为目前多语言网站的解决方案比较多,比如: 做几个不同的分站,通过用户第一次的选择将用户定位到相应语言的分站; 编辑网站内容的时候,添...

芒果龙
2011/11/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部