Android案例:电影APP列表界面+详情界面

一、效果图:

在这里插入图片描述
在这里插入图片描述

二、架构:

Activity、Fragment、使用压缩文件包提供数据信息。

三、目录结构:

在这里插入图片描述
在这里插入图片描述

四、代码:

1、配置文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.a15518.movies">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".DetailsFileActivity"/>
    </application>
</manifest>

2、主页Activity:

(1)布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:id="@+id/fragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btnone"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:drawableTop="@drawable/btn_one"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_height="match_parent"
            android:text="首页"
            android:textSize="8sp"
            android:textColor="@color/gray"
            android:background="#FFFFFF"
            android:gravity="center"/>
        <Button
            android:id="@+id/btntwo"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_height="match_parent"
            android:text="电影"
            android:textSize="7sp"
            android:textColor="@color/gray"
            android:background="#FFFFFF"
            android:drawableTop="@drawable/btn_two"
            android:gravity="center"/>
        <Button
            android:id="@+id/btnthree"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="视频"
            android:textSize="8sp"
            android:textColor="@color/gray"
            android:background="#FFFFFF"
            android:drawableTop="@drawable/btn_three"/>
        <Button
            android:id="@+id/btnfour"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="演出"
            android:textSize="8sp"
            android:textColor="@color/gray"
            android:background="#FFFFFF"
            android:drawableTop="@drawable/btn_four"/>
        <Button
            android:id="@+id/btnfive"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="我的"
            android:textSize="8sp"
            android:textColor="@color/gray"
            android:background="#FFFFFF"
            android:drawableTop="@drawable/btn_five"/>
    </LinearLayout>
</LinearLayout>

在这里插入图片描述

(2)java:

package com.example.a15518.movies;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    private Button btn_two;//电影按钮
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_two = (Button) findViewById(R.id.btntwo);
        btn_two.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("clh","点击电影按钮");
                //修改背景色
                btn_two.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
                //第一步:创建Fragment的实例对象
                Fragment_two fragment_two = new Fragment_two();
                //第二步:调用activity的getSupportFragmentManager()获取FragmentManager对象
                FragmentManager fragmentManager = getFragmentManager();
                //第三步:获取FragmentTrasction对象
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                //第四步:FragmentTrasction对象调用需要执行的方法add()、replace()、remove()
                fragmentTransaction.add(R.id.fragment,fragment_two);
                //第五步:FragmentTrasction对象调用commit()方法提交事务到Activity
                fragmentTransaction.commit();
            }
        });
    }
}

3、详情页Activity:

(1)布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="2dp"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:background="@drawable/backgroundimg">
    <Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="2dp">
        <TextView
            android:id="@+id/ret"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="返回"
            android:textColor="@color/gray"
            android:textSize="10sp"
            android:gravity="left"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="电影"
            android:textSize="15sp"
            android:textColor="@color/gray"
            android:layout_gravity="center"
            android:gravity="center"/>
    </Toolbar>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginBottom="15dp">
        <ImageView
            android:id="@+id/img1"
            android:layout_width="100dp"
            android:layout_height="150dp"
            android:layout_marginRight="10dp"
            android:scaleType="fitXY"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:id="@+id/text1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:textColor="#FFFFFF"
                android:text="你好,李焕英"/>
            <TextView
                android:id="@+id/text3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/colorAccent"
                android:textSize="12dp"
                android:text="猫眼评分 9.3"
                android:paddingTop="5dp"/>
            <TextView
                android:id="@+id/text4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/gray"
                android:text="主演:贾玲"
                android:paddingTop="20dp"/>
            <TextView
                android:id="@+id/text6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/gray"
                android:text="上映类型"/>
            <TextView
                android:id="@+id/text7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/gray"
                android:text="上映时间"
                android:ellipsize="end"
                android:lines="1"/>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="1">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="简介"
            android:textColor="#FFFFFF"
            android:textSize="20sp"/>

        <TextView
            android:id="@+id/btn1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:text="收起^"
            android:textSize="10dp"
            android:layout_gravity="center"
            android:textColor="@color/gray"/>
    </LinearLayout>
    <TextView
        android:id="@+id/text8"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:textColor="#FFFFFF"/>
</LinearLayout>

在这里插入图片描述

(2)java:

package com.example.a15518.movies;


import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.a15518.util.BitmapIOUtil;

public class DetailsFileActivity extends Activity {
    private TextView btn1;//“收起”按钮
    boolean flag = true; //简介是否可见
    private TextView ret;//返回按钮
    private TextView textView1;
    private TextView textView3;
    private TextView textView4;
    private TextView textView6;
    private TextView textView7;
    private TextView textView8;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.item_detail);
        //接收数据
        String imgpath=this.getIntent().getStringExtra("imgPath");
        String text1=this.getIntent().getStringExtra("text1");
        String text3=this.getIntent().getStringExtra("text3");
        String text4=this.getIntent().getStringExtra("text4");
        String text6=this.getIntent().getStringExtra("text6");
        String text7=this.getIntent().getStringExtra("text7");
        final String text8=this.getIntent().getStringExtra("text8");
        //设置控件文本
        textView1=(TextView)this.findViewById(R.id.text1);
        textView1.setText(text1);
        textView3=(TextView)this.findViewById(R.id.text3);
        textView3.setText(text3);
        textView4=(TextView)this.findViewById(R.id.text4);
        textView4.setText(text4);
        textView6=(TextView)this.findViewById(R.id.text6);
        textView6.setText(text6);
        textView7=(TextView)this.findViewById(R.id.text7);
        textView7.setText(text7);
        textView8=(TextView)this.findViewById(R.id.text8);
        textView8.setText(text8);
        ImageView imgView=(ImageView)this.findViewById(R.id.img1);
        Bitmap bit= BitmapIOUtil.getSBitmap(imgpath);
        imgView.setImageBitmap(bit);
        //收起&展开按钮
        btn1 = (TextView) findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (flag == true){
                    flag = false;
                    btn1.setText("展开v");
                    textView8.setVisibility(View.INVISIBLE);
                }else{
                    flag = true;
                    textView8.setVisibility(View.VISIBLE);
                    btn1.setText("收起^");
                }
            }
        });
        //返回按钮
        ret = (TextView) findViewById(R.id.ret);
        ret.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(DetailsFileActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }
}

4、Fragment:

(1)布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:numColumns="2">
    </GridView>
</LinearLayout>

在这里插入图片描述

(2)java:

package com.example.a15518.movies;

import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;

import com.example.a15518.util.BitmapIOUtil;
import com.example.a15518.util.PubMethod;
import com.example.a15518.util.ZipUtil;

import java.util.ArrayList;
import java.util.HashMap;

public class Fragment_two extends Fragment {
    private String[] infor=new String[40];         //文件内容,获取图片、名字、影片源、评分、主演、放映量、电影类型、上映时间、简介。
    private String[] imgPath=new String[20];      //图片路径
    private String[] texts1=new String[20];       //名字
    private String[] texts2=new String[20];       //影片源
    private String[] texts3=new String[20];       //评分
    private String[] texts4=new String[20];       //主演
    private String[] texts5=new String[20];       //放映量
    private String[] texts6=new String[20];       //电影类型
    private String[] texts7=new String[20];       //上映时间
    private String[] texts8=new String[20];       //简介
    private Bitmap[] imgBp=new Bitmap[20];     //图片数组
    private GridView gridview;
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_two, container, false);
        gridview=(GridView) view.findViewById(R.id.gridView1);
        try
        {
            //解压缩data.zip到sd卡中
            ZipUtil.unZip(getActivity(), "data.zip", "/sdcard/");
        }
        catch(Exception e)
        {
            System.out.println("解压出错!");
        }
        //获取文本内容,获取图片名和商品名。
        String information= PubMethod.loadFromFile("movies/filename.txt");
        //split方法把字符串按照指定的分割符进行分割,然后返回字符串数组。
        infor=information.split("\\|");
        final int count=infor.length/9;//计算商品数量
        //获取图片和商品名的路径
        for(int i=0;i<count;i++)
        {
            imgPath[i]="movies/img/"+infor[9*i];
            texts1[i]=infor[9*i+1];
            texts2[i]=infor[9*i+2];
            texts3[i]=infor[9*i+3];
            texts4[i]=infor[9*i+4];
            texts5[i]=infor[9*i+5];
            texts6[i]=infor[9*i+6];
            texts7[i]=infor[9*i+7];
            texts8[i]=infor[9*i+8];
        }
        //获取图片
        for(int i=0;i<count;i++)
        {
            imgBp[i]= BitmapIOUtil.getSBitmap(imgPath[i]);
        }
        //生成动态数组,并且转入数据
        ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
        for(int i=0;i<count;i++)
        {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("img1",imgBp[i]);   //添加图像资源
            map.put("text1",texts1[i]);
            map.put("text2",texts2[i]);
            map.put("text3",texts3[i]);
            map.put("text4",texts4[i]);
            map.put("text5",texts5[i]);
            lstImageItem.add(map);
        }
        //生成适配器的ImageItem <====> 动态数组的元素,两者一一对应
        SimpleAdapter simpleAdapter = new SimpleAdapter(getActivity(),
                lstImageItem,    //数据来源
                R.layout.gridview_item,    //night_item的XML实现
                new String[] {"img1","text1","text2","text3","text4","text5"},   //动态数组与ImageItem对应的子项
                //ImageItem的XML文件里面的一个ImageView,一个TextView ID
                new int[] {R.id.img1,R.id.text1,R.id.text2,R.id.text3,R.id.text4,R.id.text5});
        //以下代码将位图数据data设置到ImageView中,以实现子布局绑定显示图片功能。
        simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder(){
            public boolean setViewValue(View view, Object data, String textRepresentation) {
                if( (view instanceof ImageView) & (data instanceof Bitmap) ) {
                    ImageView iv = (ImageView) view;
                    Bitmap bm = (Bitmap) data;
                    iv.setImageBitmap(bm);
                    return true;
                }
                return false;
            }
        });
        //设置GridView的适配器为新建的simpleAdapter
        gridview.setAdapter(simpleAdapter);
        //点击GridView每个子项时的监听事件
        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.d("clh","点击");
                //选中项目,跳转到下一界面
                Intent intent=new Intent(getActivity(),DetailsFileActivity.class);
                intent.putExtra("text1",texts1[i]);
                intent.putExtra("text3",texts3[i]);
                intent.putExtra("text4",texts4[i]);
                intent.putExtra("text6",texts6[i]);
                intent.putExtra("text7",texts7[i]);
                intent.putExtra("text8",texts8[i]);
                intent.putExtra("imgPath",imgPath[i]);
                startActivity(intent);
            }
        });
        return view;
    }
}

(3)GridView单个列表项布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center"
    android:paddingBottom="1dp"
    android:descendantFocusability="blocksDescendants">
    <ImageView
        android:id="@+id/img1"
        android:layout_width="100dp"
        android:layout_height="150dp"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/text1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:text="你好,李焕英"/>
            <TextView
                android:id="@+id/text2"
                android:text="影院"
                android:textSize="12sp"
                android:gravity="center"
                android:textColor="#FFFFFF"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@color/gray"/>
        </LinearLayout>
        <TextView
            android:id="@+id/text3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorPrimary"
            android:textSize="16dp"
            android:text="猫眼评分 9.3" />
        <TextView
            android:id="@+id/text4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/gray"
            android:text="主演:贾玲"/>
        <TextView
            android:id="@+id/text5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/gray"
            android:text="今天63家电影院放映491场"/>
    </LinearLayout>
    <Button
        android:id="@+id/btn"
        android:textColor="#FFFFFF"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="购票"
        android:background="@drawable/shape_corner"
        android:clickable="false"/>
</LinearLayout>

在这里插入图片描述

5、压缩文件类:

(1)BitmapIOUtil:

package com.example.a15518.util;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class BitmapIOUtil {
    static PubMethod pub=new  PubMethod();
    static Bitmap bp=null;
    public  static Bitmap  getSBitmap(String subPath)
    {
        try
        {
            String path=Constant.ADD_PRE+subPath;
            bp = BitmapFactory.decodeFile(path);
        }

        catch(Exception e)
        {
            System.out.println("出现异常!");
        }
        return bp;
    }
}

(2)Constant:

package com.example.a15518.util;

public class Constant {
    public static final String ADD_PRE="/sdcard/data/";
}

(3)PubMethod:

package com.example.a15518.util;

import android.app.Activity;

import java.io.File;
import java.io.FileInputStream;


public class PubMethod
{
    Activity activity;
    public PubMethod()
    {
    }
    public PubMethod(Activity activity)
    {
        this.activity=activity;
    }
    //获取文件信息
    public static  String loadFromFile(String fileName)
    {
        String result=null;
        try
        {
            String filepath= Constant.ADD_PRE+fileName;
            File file=new File(filepath);
            int length=(int)file.length();
            byte[] buff=new byte[length];
            FileInputStream fin=new FileInputStream(file);
            fin.read(buff);
            fin.close();
            result=new String(buff,"UTF-8");
            System.out.println("找到文件"+fileName);
            result=result.replaceAll("\\r\\n","");
        }
        catch(Exception e)
        {
            System.out.println("对不起,没有找到指定文件!"+fileName);
            //Toast.makeText(activity, "对不起,没有找到指定文件!", Toast.LENGTH_SHORT).show();
        }
        return result;
    }
}

(4)ZipUtil:

package com.example.a15518.util;

import android.content.Context;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipUtil {
    public static void unZip(Context context, String assetName,  String outputDirectory) throws IOException
    {
        //创建解压目标目录
        File file = new File(outputDirectory);
        //如果目标目录不存在,则创建
        if (!file.exists())
        {
            file.mkdirs();
        }
        InputStream inputStream = null;
        //打开压缩文件
        inputStream = context.getAssets().open(assetName);
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        //读取一个进入点
        ZipEntry zipEntry = zipInputStream.getNextEntry();
        //使用1Mbuffer
        byte[] buffer = new byte[1024 * 1024];
        //解压时字节计数
        int count = 0;
        //如果进入点为空说明已经遍历完所有压缩包中文件和目录
        while (zipEntry != null)
        {
            //如果是一个目录
            if (zipEntry.isDirectory())
            {
                //String name = zipEntry.getName();
                //name = name.substring(0, name.length() - 1);
                file = new File(outputDirectory + File.separator + zipEntry.getName());
                file.mkdir();
            } else
            {
                //如果是文件
                file = new File(outputDirectory + File.separator
                        + zipEntry.getName());
                //创建该文件
                file.createNewFile();
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                while ((count = zipInputStream.read(buffer)) > 0)
                {
                    fileOutputStream.write(buffer, 0, count);
                }
                fileOutputStream.close();
            }
            //定位到下一个文件入口
            zipEntry = zipInputStream.getNextEntry();
        }
        zipInputStream.close();
    }
}

6、filename.txt格式:

movie1.jpg|你好,李焕英|杜比 2D|猫眼评分 9.5|主演:贾玲,张小斐,沈腾|今天63家影院放映491场|喜剧/剧情|2021-02-12 8:00中国大陆上映/126分钟>|2001年的某一天,刚刚考上大学的贾晓玲(贾玲饰)经历了人生中的一次大起大落。一心想要成为母亲骄傲的她却因母亲突遭严重意外,而悲痛万分。在贾晓玲情绪崩溃的状态下,竟意外的回到了1981年,并与年轻的母亲李焕英(张小斐饰)相遇,二人形影不离,宛如闺蜜。与此同时,也结识了一群天真善良的好朋友。晓玲以为来到了这片“广阔天地”,她可以凭借自己超前的思维,让母亲“大有作为”,但结果却让晓玲感到意外.....|
movie2.jpg|阿凡达|IMAX 3D|猫眼评分 9.3|主演:萨姆,佐伊|今天61家影院放映531场|动作/科幻/冒险|2021-03-12 8:00中国大陆重映/162分钟>|战斗中负伤而下身瘫痪的前海军战士杰克·萨利(萨姆·沃辛顿饰)决定替死去的同胞哥哥到潘多拉星控操纵格蕾丝博士(西格妮·韦弗饰)用人类基因与当地纳美部族基因结合创造出的“阿凡达“混血生物。"杰克的目的是打入纳美部落,外交说服他们自愿离开世代居住的家园,从而SecFor公司可砍伐殆尽该地区的原始森林,开采地下昂贵的“不可得"矿。在探索潘多拉星的过程中,杰克遇到了纳美部落的公主娜蒂瑞(佐伊·索尔达娜饰),向她学习了纳美人的生存技能与对待自然的态度。与此同时,SecFor公司的经理和军方代表上校迈尔斯(史蒂芬·朗饰)逐渐丧失耐心,决定诉诸武力驱赶纳美人。|
movie3.jpg|人潮汹涌|巨幕 2D|猫眼评分 9.1|主演:刘德华|今天43家影院放映520场|喜剧/剧情/爱情|2021-02-12 8:00中国大陆上映/119分钟>|2021年,你做好准备换个活法,牛转乾坤了吗?顶级杀手周全(刘德华饰)和落寞群演陈小萌(肖央饰)在一次意外中交换了身份。杀手在跌入谷底的过程中,重新审视了爱情和生活;群演在冒充杀手的过程中,彻底重塑了人生。两个人一起历经的荒诞,有啼笑皆非,更有热血沸腾。|
movie4.jpg|唐人街探案3|杜比 2D|猫眼评分 8.8|主演:王宝强|今天69家影院放映425场|喜剧/悬疑|2021-02-12 8:00中国大陆上映/130分钟>|继曼谷、纽约之后,东京再出大案。唐人街神探唐仁(王宝强饰)、秦风(刘昊然饰)受侦探野田昊(妻夫木聪饰)的邀请前往破案。“CRIMASTER世界侦探排行榜”中的侦探们闻讯后也齐聚东京,加入挑战,而排名第一Q的现身,让这个大案更加扑朔迷离,一场亚洲最强神探之间的较量即将爆笑展开......|
movie5.jpg|刺杀小说家|杜比 2D|猫眼评分 8.6|主演:雷佳音|今天81家影院放映874场|动作/奇幻/冒险|2021-02-12 8:00中国大陆上映/137分钟>|异世界皇都,天神赤发鬼残暴统治,滥杀无辜。少年空文因被赤发鬼追杀,决定奋起反击。在黑甲的指引下,踏上了凡人弑神之路。这是小说家路空文笔下的奇幻世界。没想到小说的进程,竟然影响着现实世界。这时一名男子接下了刺杀他的任务|
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姓蔡小朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值