android的过渡动画已经出了好久了,一直没怎么使用。自己还是懒啊,昨天在看blog的时候,看到了亓斌的blog里有相关的介绍。正好,自己也就跟着学一下,写一个例子做为应用。
http://blog.csdn.net/qibin0506/article/details/48129139
http://blog.csdn.net/qibin0506/article/details/53248597
上面这两个就是亓斌的blog,大家可以去看一下,可以让你知道是怎么回事,我这里只是在应用上做一个例子。
这个例子,很简单,就是从一个列表页,到详细页的转换,它的过渡动画相当不错,因为机器没有安虚拟器,所以就不放图了,我会在最后,给一个demo。
要使用android的过渡动画,你的最小版本也要4.0,而要使用其中的share功能,你就得是5.0以上。这个大家要注意了。
功能很简单,就是两个页面,一个listView页面,一个页面。
一,修改style.xml
我们要先在style.xml里,添加过渡样式
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentTransitions">true</item>
<!--下面的内容要在5.0上才好用
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>-->
</style>
</resources>
二,建立列表页,这里就是使用最简单的listView,没有下列刷新也没有更多,就是一个列表activity_list_view_text.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.cg.activityoptionslearn.ListViewTextActivity">
<ListView
android:id="@+id/list_text"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</RelativeLayout>
列表项中,因为我要试多view协作,所以加三个控件,一个图片,两个TextView
注:这里会为每个控件添加一个transitionName的属性,它的名字是与详细页面相应控件的这个属性名是一样的,是为了实现过渡动画的。
listitem.xml
<?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">
<ImageView
android:id="@+id/img_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="5dp"
android:transitionName="image"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是标题"
android:gravity="center_vertical"
android:transitionName="title"/>
<TextView
android:id="@+id/txt_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:singleLine="false"
android:maxLines="2"
android:transitionName="content"
/>
</LinearLayout>
</LinearLayout>
下面是一个model
myNews.java
/**
* Created by Administrator on 2016/12/7 0007.
*/
public class myNews {
private String title;
private String content;
private int pic;
public myNews() {
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getPic() {
return pic;
}
public void setPic(int pic) {
this.pic = pic;
}
}
一个Adapter
myAdapter.java
package com.example.cg.activityoptionslearn.adpter;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.cg.activityoptionslearn.ContentActivity;
import com.example.cg.activityoptionslearn.R;
import com.example.cg.activityoptionslearn.models.myNews;
import java.util.List;
/**
* Created by Administrator on 2016/12/7 0007.
*/
public class myAdapter extends BaseAdapter {
private List<myNews> list_data;
private LayoutInflater inflater;
private Context context;
public myAdapter(Context context,List<myNews> list_data) {
this.context = context;
this.list_data = list_data;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list_data.size();
}
@Override
public Object getItem(int i) {
return list_data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
myHolder mHolder;
if(view==null)
{
mHolder = new myHolder();
view = inflater.inflate(R.layout.listitem,null);
mHolder.tv_title = (TextView)view.findViewById(R.id.txt_title);
mHolder.tv_content = (TextView)view.findViewById(R.id.txt_content);
mHolder.img = (ImageView)view.findViewById(R.id.img_img);
view.setTag(mHolder);
}else{
mHolder = (myHolder)view.getTag();
}
mHolder.tv_title.setText(list_data.get(i).getTitle());
mHolder.tv_content.setText(list_data.get(i).getContent());
mHolder.img.setImageResource(list_data.get(i).getPic());
/*mHolder.tv_title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityOptionsCompat compat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, view, "title");
Intent intent = new Intent();
intent.setClass(context, ContentActivity.class);
intent.putExtra("title", list_data.get(i).getTitle());
intent.putExtra("content", list_data.get(i).getContent());
intent.putExtra("image", list_data.get(i).getPic());
ActivityCompat.startActivity((Activity) context, intent, compat.toBundle());
}
});
mHolder.tv_content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityOptionsCompat compat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, view, "content");
Intent intent = new Intent();
intent.setClass(context, ContentActivity.class);
intent.putExtra("title", list_data.get(i).getTitle());
intent.putExtra("content", list_data.get(i).getContent());
intent.putExtra("image",list_data.get(i).getPic());
ActivityCompat.startActivity((Activity) context, intent, compat.toBundle());
}
});
mHolder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityOptionsCompat compat = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context, view, "image");
Intent intent = new Intent();
intent.setClass(context, ContentActivity.class);
intent.putExtra("title", list_data.get(i).getTitle());
intent.putExtra("content", list_data.get(i).getContent());
intent.putExtra("image",list_data.get(i).getPic());
ActivityCompat.startActivity((Activity) context, intent, compat.toBundle());
}
});*/
return view;
}
class myHolder
{
TextView tv_title;
TextView tv_content;
ImageView img;
}
}
列表页面的代码
ListViewTextActivity.java
package com.example.cg.activityoptionslearn;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.util.Pair;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.cg.activityoptionslearn.adpter.myAdapter;
import com.example.cg.activityoptionslearn.models.myNews;
import java.util.ArrayList;
import java.util.List;
/**
* 在listView的item中使用makeSceneTransitionAnimation动画
* 点击标题进入到详细页面
*/
public class ListViewTextActivity extends AppCompatActivity {
public static void ListViewTextActivityStart(Context context)
{
Intent intent = new Intent();
intent.setClass(context,ListViewTextActivity.class);
context.startActivity(intent);
}
private ListView list_text;
private List<myNews> list_data;
private myAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_text);
initData();
initControls();
}
/**
* 初始化数据
*/
private void initData() {
list_data = new ArrayList<>();
myNews mNews1 = new myNews();
mNews1.setTitle("倒计时1天,2016中国大数据技术大会召开在即");
mNews1.setContent("2016中国大数据技术大会(Big Data Technology Conference 2016,BDTC 2016)将于12月8日-10日在北京新云南皇冠假日酒店如约召开。作为大数据技术开发者的年度盛会,大会主办方共设置了16大专题论坛,邀请了超过130位大数据专家亲临现场,为与会者奉献一场大数据技术和应用的饕餮盛宴。(建议一定要带相机!)\n" +
"\n" +
"如果您抢到了本次大会的门票,下面的提示要点也许能帮助您获得更好的现场体验:\n" +
"\n" +
"活动地点是北京新云南皇冠假日酒店,在北京市朝阳区东北三环西坝河,太阳宫桥东北角。地铁十号线芍药居站E口出来左转(太阳宫桥东北角)就可以到达。\n" +
"\n" +
"北京天气寒冷,请大家注意保暖,尤其是南方来的小伙伴们,准备好御寒的衣物,最好带上口罩(我们都懂得)。预计会议期间的天气和温度如下:");
mNews1.setPic(R.drawable.mm2);
list_data.add(mNews1);
myNews mNews2 = new myNews();
mNews2.setTitle("【ECCV 2016】Grid Loss及其在人脸检测中的应用");
mNews2.setContent("检测被遮挡的人脸,这一任务的难点在于,遮挡会导致一部分人脸特征缺失,取而代之的是遮挡物的特征,这不仅容易引起分类器误判," +
"还容易造成漏检。解决遮挡人脸检测的问题可以从数据与算法两个方面切入。从数据方面入手的做法较为直接,即在分类器训练阶段," +
"在正样例集中加入一定比例的带遮挡人脸,让分类器从数据中自动去学习带遮挡人脸的变化模式。数据驱动的方式也就意味着对数据的依赖," +
"而遮挡的变化模式复杂多样,如果希望模型能对遮挡有较好的鲁棒性和泛化能力,那将需要非常大量的数据。从算法的角度入手," +
"已有的一些工作在解决遮挡问题时,有些需要在训练数据中标好人脸的五官,这样在训练数据的制备收集阶段要花费更多的精力;" +
"有些在人脸检测的预测阶段有额外的计算,这样会因为处理遮挡带来额外的时间开销,而检测本身就是一个对速度极其敏感的任务,这也不是我们希望看到的。");
mNews2.setPic(R.drawable.mm3);
list_data.add(mNews2);
myNews mNews3 = new myNews();
mNews3.setTitle("李理:详解卷积神经网络");
mNews3.setContent("这里主要参考了Neural Networks and Deep Learning和cs231n的课程来介绍CNN,两部分都会有理论和代码。前者会用theano来实现," +
"而后者会使用我们前一部分介绍的自动梯度来实现。下面首先介绍Michael Nielsen的部分(其实主要是翻译,然后加一些我自己的理解)。\n" +
"\n" +
"前面的话\n" +
"如果读者自己尝试了上一部分的代码,调过3层和5层全连接的神经网络的参数,我们会发现神经网络的层数越多,参数(超参数)" +
"就越难调。但是如果参数调得好,深的网络的效果确实比较浅的好(这也是为什么我们要搞深度学习的原因)。" +
"所以深度学习有这样的说法:“三个 bound 不如一个 heuristic,三个 heuristic 不如一个trick”。" +
"以前搞机器学习就是feature engineering加调参,现在就剩下调参了。网络的结构,参数的初始化,learning_rate," +
"迭代次数等等都会影响最终的结果。有兴趣的同学可以看看Michael Nielsen这个电子书的相应章节,cs231n的Github资源也有介绍," +
"另外《Neural Networks: Tricks of the Trade》这本书,看名字就知道讲啥的了吧。");
mNews3.setPic(R.drawable.mm2);
list_data.add(mNews3);
myNews mNews4 = new myNews();
mNews4.setTitle("PouchDB:浏览器端数据库");
mNews4.setContent("PouchDB是一个受Apache CouchDB启发的开源JavaScript数据库。可以完美运行在浏览器中。\n" +
"\n" +
"PouchDB设计的初衷是,帮助Web开发者构建能在本地离线运行的App,一如在线时运行的一样。\n" +
"\n" +
"它能让应用程序离线时存储数据,并在回到线上时与服务器兼容,同步数据,保持用户数据的同步。\n" +
"\n" +
"什么是PouchDB?\n" +
"PouchDB是CouchDB的JavaScript实现,目标是实现可以和CouchDB相媲美的API,可以在浏览器和Node.js运行。\n" +
"\n" +
"什么是CouchDB?\n" +
"CouchDB是由Damien Katz于2015年写的NoSQL数据库,现在由Apache软件基金会负责维护。如果你是一个JavaScript开发者,你可能每天都在用CouchDB,因为它的核心技术驱动着npm。\n" +
"\n" +
"Couchbase、CouchDB等都是什么?\n" +
"现在,有两个数据库的血缘可以追溯到CouchDB:Couchbase,和Cloudant。他们都是从CouchDB分离出来的产品。\n" +
"\n" +
"然而,这三种数据库都是使用了相同的CouchDBsync协议。这意味着PouchDB可与这三个数据库配合使用。\n" +
"\n" +
"换句话说,这些数据库像是电话运营商,而CouchDB同步协议是底层的基础技术。");
mNews4.setPic(R.drawable.mm3);
list_data.add(mNews4);
myNews mNews5 = new myNews();
mNews5.setTitle("5位讲师齐聚一堂 共讨“网络与通讯大数据”未来");
mNews5.setContent("作为国内大数据领域的顶级大会,2016中国大数据技术大会将于2016年12月8日-10日在北京新云南皇冠假日酒店隆重举办。" +
"中国大数据技术大会从2008年至今已近十年,超过一万名大数据开发者参与其中,完整地见证了中国大数据技术与应用的变革," +
"忠实地描绘了大数据领域内的技术热点,沉淀了无数极具价值的行业实战经验,历经九届的中国大数据技术大会由于其专业性、技术性," +
"已经成为国内外大数据领域的顶级盛会,也因此受到大数据开发者的强烈关注。\n" +
"\n" +
"本次大会是由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、中科天玑数据科技股份有限公司与CSDN共同协办。" +
"聚焦行业最佳实践,数据与应用的深度融合,关注热门技术在行业中的最佳实践和深度应用。除Keynote以外,主办方还精心策划了16场+专题技术和行业论坛," +
"100多场技术演讲,累计邀请超过130位技术专家担任演讲嘉宾。预计数千名大数据行业精英、技术专家及意见领袖将齐聚2016中国大数据技术大会," +
"分享最新技术与实践的洞察与经验,共商大数据时代发展之计。");
mNews5.setPic(R.drawable.p1);
list_data.add(mNews5);
myNews mNews6 = new myNews();
mNews6.setTitle("聚焦行业最佳实践,BDTC 2016最新完整议程公布");
mNews6.setContent("2016年12月8-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、" +
"中科天玑数据科技股份有限公司与CSDN共同协办的2016中国大数据技术大会(Big Data Technology Conference 2016,BDTC 2016)" +
"将在北京新云南皇冠假日酒店隆重举办。\n" +
"\n" +
"中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(Hadoop in China,HiC)。从2008年仅60余人参加的技术沙龙发展到当下数千人参与," +
"国内最具影响力、规模最大的大数据领域技术盛会,以及国内外中高级技术精英最期待大数据技术交流平台。" +
"连续成功举办九届的BDTC见证了中国大数据技术生态系统的建立、发展和演变。");
mNews6.setPic(R.drawable.mm2);
list_data.add(mNews6);
myNews mNews7 = new myNews();
mNews7.setTitle("Android应用内存泄漏的定位、分析与解决策略");
mNews7.setContent("图中的每个圆节点代表对象的内存资源,箭头代表可达路径。当圆节点与 GC Roots 存在可达路径时,表示当前资源正被引用," +
"虚拟机是无法对其进行回收的(如图中的黄色节点)。反过来,如果圆节点与 GC Roots 不存在可达路径,则意味着这块对象的内存资源不再被程序引用," +
"系统虚拟机可以在 GC 过程中将其回收掉。\n" +
"\n" +
"有了上面的内存回收的栗子,那么接下来就可以说说什么是内存泄漏了。从定义上讲,Android(Java)平台的内存泄漏是指没有用的对象资源任" +
"与GC-Root保持可达路径,导致系统无法进行回收。举一个最简单的栗子,我们在 Activity 的 onCreate 函数中注册一个广播接收者," +
"但是在 onDestory 函数中并没有执行反注册,当 Activity 被 finish 掉时,Activity 对象已经走完了自身的生命周期," +
"应该被资源回收释放掉,但由于没有反注册, 此时 Activity 和 GC-Root 间任然有可达路径存在,导致 Activity 虽然被销毁," +
"但是所占用的内存资源却无法被回收掉。类似的栗子其实有很多,不一一例举了。对于 Android(Java)内存回收管理想要再深入了解的童鞋," +
"可以看看下面资源:");
mNews7.setPic(R.drawable.p1);
list_data.add(mNews7);
myNews mNews8 = new myNews();
mNews8.setTitle("倒计时1天,2016中国大数据技术大会召开在即");
mNews8.setContent("2016中国大数据技术大会(Big Data Technology Conference 2016,BDTC 2016)将于12月8日-10日在北京新云南皇冠假日酒店如约召开。作为大数据技术开发者的年度盛会,大会主办方共设置了16大专题论坛,邀请了超过130位大数据专家亲临现场,为与会者奉献一场大数据技术和应用的饕餮盛宴。(建议一定要带相机!)\n" +
"\n" +
"如果您抢到了本次大会的门票,下面的提示要点也许能帮助您获得更好的现场体验:\n" +
"\n" +
"活动地点是北京新云南皇冠假日酒店,在北京市朝阳区东北三环西坝河,太阳宫桥东北角。地铁十号线芍药居站E口出来左转(太阳宫桥东北角)就可以到达。\n" +
"\n" +
"北京天气寒冷,请大家注意保暖,尤其是南方来的小伙伴们,准备好御寒的衣物,最好带上口罩(我们都懂得)。预计会议期间的天气和温度如下:");
mNews8.setPic(R.drawable.mm2);
list_data.add(mNews8);
myNews mNews9 = new myNews();
mNews9.setTitle("Firebug宣布停止开发更新");
mNews9.setContent("Firebug是Firefox旗下的一款扩展工具,可以在各种浏览器下面调试功能。它集HTML查看和编辑、Javascript控制台、" +
"网络状况监视器于一体,是开发JavaScript、CSS、HTML和Ajax的得力助手。\n" +
"\n" +
"随着Firefox内置工具DevTools的发展强大,Firebug也迎来了停更的命运。无论怎样,Firebug都曾给开发者给予过太多的惊喜与帮助," +
"祝它一路走好。\n" +
"\n" +
"下面分别是摘取Hacker News和Reddit网友的一些评论:\n" +
"\n" +
"Epskampie:依我来看,Firebug在Web开发上进行了一次革命,使得普通的开发者也可以进行JS Web应用的开发。" +
"感谢您为开发者在当今浏览器中提供了“开发人员工具”使用的界面和工具。\n" +
"\n" +
"nkkollaw:我上次使用Firebug还是在几年前,它使得依赖Firefox开发比其它任何浏览器轻100倍。后来,Chrome出来了," +
"Firefox也内置了DevTools,因此,它的停产是有意义的。但无论怎样,它都是一个好产品。");
mNews9.setPic(R.drawable.p1);
list_data.add(mNews9);
myNews mNews10 = new myNews();
mNews10.setTitle("基于Tensorflow和TF-Slim图像分割示例");
mNews10.setContent("在上一篇文章里(如何用TensorFlow和TF-Slim实现图像分类与分割),我们介绍了如何截取图片的中央区域," +
"然后用标准的分类模型对图片的类别进行预测。随后,我们又介绍了如何将网络模型改为全卷积模式,对整张图片进行预测。" +
"我们通过这种方法可以得到原始图片的一张降采样预测图 —— 降采样是由于网络结构含有最大池化层。这种预测图可以被视为一种全图的快速预测。" +
"你也可以把它看作是一种图像分割的方法,但并不算严格意义上的图像分割,因为标准网络模型是以图像分类的目标而训练得到的。" +
"为了实现真正的图像分割任务,我们需要在图像分割的数据集上重新训练模型,训练的方法参照Long等人发表的论文" +
"《Fully convolutional networks for semantic segmentation》。图像分割常用的两种数据集分别是:" +
"Microsoft COCO和PASCAL VOC。\n" +
"\n" +
"在这篇文章里,我们将对预测图进行上采样,从而使得输出的图片与输入图片尺寸保持一致。值得注意的一点是不要把我们的方法与所谓的deconvolution混淆," +
"它们分别是两种不同的操作方法。我们的方法准确的来说应该叫fractionally strided convolution,或者称之为微步长卷积吧。" +
"下文中,我们会适当介绍一些理论知识以便于理解。");
mNews10.setPic(R.drawable.mm1);
list_data.add(mNews10);
}
/**
* 初始化控件
*/
private void initControls() {
list_text = (ListView)findViewById(R.id.list_text);
mAdapter = new myAdapter(this,list_data);
list_text.setAdapter(mAdapter);
list_text.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//这里我用的是多view连动,你可以根据你自己情况,采用单独的或是几个view过渡
Pair<View, String> pTitle = Pair.create(view.findViewById(R.id.txt_title),"title");
Pair<View, String> pContent = Pair.create(view.findViewById(R.id.txt_content),"content");
Pair<View, String> pImage = Pair.create(view.findViewById(R.id.img_img),"image");
ActivityOptionsCompat compat = ActivityOptionsCompat.makeSceneTransitionAnimation(ListViewTextActivity.this,pTitle,pContent,pImage);
Intent intent = new Intent();
intent.setClass(ListViewTextActivity.this,ContentActivity.class);
intent.putExtra("title", list_data.get(i).getTitle());
intent.putExtra("content", list_data.get(i).getContent());
intent.putExtra("image",list_data.get(i).getPic());
ActivityCompat.startActivity(ListViewTextActivity.this,intent,compat.toBundle());
}
});
}
}
在这个页面中有一点要说明,就是在过渡动画的时候,我们可以让它多view互动,也可以使用单view互动。
上面的例子中给出的是多view互动,单view就是
ActivityOptionsCompat compat =
ActivityOptionsCompat.makeSceneTransitionAnimation(this,
view, "content");
三,建立详细页面
activity_content.xml这里要注意的就是transitionName它的名字一定要与上面的对应上,过渡动画就是指它来进行判断的,你可以试,把图片的改成内容,或是把内容的改成标题,看是什么效果。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.cg.activityoptionslearn.ContentActivity"
android:orientation="vertical">
<TextView
android:id="@+id/txt_cTitle"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
android:transitionName="title"/>
<ImageView
android:id="@+id/img_cimg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:transitionName="image"
/>
<TextView
android:id="@+id/txt_cContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:transitionName="content"
/>
</LinearLayout>
ContentActivity.java
package com.example.cg.activityoptionslearn;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
public class ContentActivity extends AppCompatActivity {
private TextView txt_cTitle;
private TextView txt_cContent;
private ImageView img_cimg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
initControls();
}
/**
* 初始化控件
*/
private void initControls() {
txt_cTitle = (TextView)findViewById(R.id.txt_cTitle);
txt_cContent = (TextView)findViewById(R.id.txt_cContent);
img_cimg = (ImageView)findViewById(R.id.img_cimg);
txt_cTitle.setText(getIntent().getStringExtra("title"));
txt_cContent.setText(getIntent().getStringExtra("content"));
img_cimg.setImageResource(getIntent().getIntExtra("image",0));
}
}