第一个是:MainActivity
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Spinner mAnimSp = (Spinner) findViewById(R.id.animation_sp);
Button mButton=(Button) findViewById(R.id.other_button);
String[] ls = getResources().getStringArray(R.array.anim_type);
List<String> list = new ArrayList<String>();
for (int i = 0; i < ls.length; i++) {
list.add(ls[i]);
}
ArrayAdapter<String> animType = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list);
animType.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mAnimSp.setAdapter(animType);
mAnimSp.setSelection(0);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, OtherActivity.class);
startActivity(intent);
switch (mAnimSp.getSelectedItemPosition()) {
case 0:
overridePendingTransition(R.anim.fade, R.anim.hold);
break;
case 1:
overridePendingTransition(R.anim.my_scale_action,
R.anim.my_alpha_action);
break;
case 2:
overridePendingTransition(R.anim.scale_rotate,
R.anim.my_alpha_action);
break;
case 3:
overridePendingTransition(R.anim.scale_translate_rotate,
R.anim.my_alpha_action);
break;
case 4:
overridePendingTransition(R.anim.scale_translate,
R.anim.my_alpha_action);
break;
case 5:
overridePendingTransition(R.anim.hyperspace_in,
R.anim.hyperspace_out);
break;
case 6:
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out);
break;
case 7:
overridePendingTransition(R.anim.push_up_in,
R.anim.push_up_out);
break;
case 8:
overridePendingTransition(R.anim.slide_left,
R.anim.slide_right);
break;
case 9:
overridePendingTransition(R.anim.wave_scale,
R.anim.my_alpha_action);
break;
case 10:
overridePendingTransition(R.anim.zoom_enter,
R.anim.zoom_exit);
break;
case 11:
overridePendingTransition(R.anim.slide_up_in,
R.anim.slide_down_out);
break;
}
}
});
}
}
public class OtherActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.other);
Button mButton=(Button) findViewById(R.id.button1);
mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(OtherActivity.this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.push_right_in,
R.anim.push_right_out);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//如果按下的是返回键,并且没有重复
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
overridePendingTransition(R.anim.push_right_in,
R.anim.push_right_out);
return false;
}
return false;
}
}
个人原创应用可可私房菜圣诞版终于出炉了,比计划晚了一些。还有比较遗憾的是因为时间和精力有限,IOS版本也没能如期发布。
同时,可可私房菜安卓版上线三个月了,下载量超过了45万。
这三个月无疑是一段难忘的日子。第一次做了软件并且得到些许的认可,也因此认识了很多前辈和志趣相投的朋友,他们给了我很多宝贵的意见和建议。
自己也深知软件有各种的不完美都没有来得及改进,却也得到了很多陌生的支持和鼓励,包括水木上收到的几百封各种内容的邮件,谢谢你们。
还有就是这款软件让我和多年没有任何联系的同学同事重新找到了彼此,你不能不说,东西很小,意外很多。
分享一些小心情给大家。
1、因为一直是以玩乐的心态做这款软件,所以对它并没有赋予太多的期待和目标,只是做了一件自己喜欢并且乐意的事儿。
也因此心态比较轻松,没有被软件升级追着走,而是按照自己的生活和步调去调整它,力求最好的状态。
2、产品上找准切入点。现在无论在哪个平台,内容看起来都差不多。跟专业的内容聚合公司相比较,去拼大而全并无太大意义。
相反,精准的小众群体可能才是个人开发者的潜在用户。
自己在整理美食的时候尽量选择随便点都是在家门口能买到的材料和好操作的菜。
因为常常用户面对太多选择也会迷茫,不如给用户少量精确的选择,每一个都很靠谱,那就动手做吧。
3、尽量的做减法,不必过于追求极致的细节体验,错过了最好的发布时期。
类似产品的最初功能不要想的太多,只要保证产品完整的基础功能如阅读、分享、评论即可,然后慢慢的优化。
因为让用户找到需要的东西,才是软件真正的价值所在。
4、上线的这几个月,可可私房菜经常被应用汇、机锋市场、安卓市场、豌豆夹、moto智件园、腾讯应用中心等应用商店多次推荐。
甚至天翼空间竟然主动为这款软件做了用户群发,这确实在某个程度上让我对行业大环境的看法有所改观。
因为个人原创作品逐渐主动被平台所接受和关注,这是个比较好的信号,所以大家用心做,我想总会被发现的。
5、从写博客开始有个比较坚持的习惯,用户有问题的邮件和回复都会一一回复,所以在软件发布后用户的评论能回复的我都一一回复。
一是对大家反馈的感激,然后是发现和改进问题,不过貌似大多平台开发者并没有回复权限。
另外微博更是可以做到一对一的交流,知道用户的感受和需求,直接交互,不光是讨论软件,甚至成为生活中的好朋友。
6、快速响应需求。在2.02版发布的时候当时内容和界面都全部整理完毕正在开发。
有用户给我消息说能不能增加皮蛋瘦肉粥,很OK,在不影响进度的情况下,尽可能的满足他们的需求,于是立即调整了了某道菜换上了皮蛋瘦肉粥。
尽量的少一些流程,多一些灵活度,这也是个人开发者在开发中的一个特点。
7、在版本更新这一块保证每版的更新都有亮点,不要为了更新而更新,在这个前提下可以保持半月升级一两次的频率,出现和被发现的几率也会比较高。
可可私房菜普通版已经到了2.02,从以前的单页到现在四个目录已经分别可以点开了,里边内容也增加了一些。每一点改进都是小小的努力。
8、另外产品提交方面有一点点感受,好像一般晚上是下载的高峰期,所以下午三四点钟提交是个不错的点。
审核的快的下班前可以在最新里边看到,当晚的量会比较大一些。
相对来说,应用汇和机锋的审核都很速度,当天就能响应,安卓市场也比较快而且在最新下载里出现后,量会比较大。
9、如何盈利是被问的最多的话题,我的直接感受是不要过于考虑商业利益。当然前提是如果你想做一款好产品,就千万不要用硬生生的广告条去影响用户体验和应用的美誉度,得不偿失。
还是那句话,很多东西用心做了,收获也是自然而然的。不抱太多的目的,反倒能收获蛮多意外,嗯。这并非站着说话不腰疼,因为一个产品的价值,并非只有从收入上才能体现出来,很多是隐形的,或者说长久的,需要沉的下去,才能做得起来。
另外目前的安卓平台上,指望着广告和收费挣钱目前都不现实,在安卓上踏踏实实的做产品才是重点。如果必须盈利,IOS是个不错的平台,前提是你的产品足够好,用户也会愿意为值得的东西买单。
10、互联网上有很多不错有意思的东西,越来越多的看到很多优质的内容被生生照搬到手机上来。
这种从PC端到手机的直接平移体验并不好,很少考虑到这两种方式的使用时间、使用场景甚至使用心情都不一样。
所以优质的体验和表现形式是关键,多站在用户的使用角度去考虑,而非快速出产品。
最后还是很早之前写的那段话
自己写美食博客三年多,现在博客的访问量快到500万了,之前也没有想过做软件什么的,但是这两三年的交流和分享中和很多读者成为了好朋友,在得知手机应用上线后,网友们也给了很多的宣传支持。
两个人业余时间做了这款软件,平常和大家一样也是朝九晚五的上班。
我自己担下了所有的内容、设计、运营和客服,让朋友可以专注开发。做自己喜欢的事情,忙碌也比较开心。
所以我想,可能软件也不仅仅只是软件,更是一种纽带。我们提供的也不光是工具,如果可以,让它成为有情感有血肉的东西,我想应该也很幸福把(*^__^*)
---------------------------------------
这次发布的可可私房菜圣诞版是以分享为主题,所以也特意用美食图片设计印刷了一些明信片准备送给喜欢的朋友。
大家可以微博私信留下自己的联系方式,东西太小,不足为道,只是想送给真心喜欢的人,谢谢:)
可可私房菜圣诞版下载:http://www.appchina.com/soft_detail_194853_0_10.html
可可私房菜普通版下载:http://www.appchina.com/soft_detail_185375_0_10.html
--
可可的新浪微博http://weibo.com/qiankeke
可可私房菜http://hi.baidu.com/kekeke2007
小姑娘很强啊,大叔我惭愧了
效果展示
public class FlipperActivity extends Activity{
private ViewFlipper flipper = null;
private ImageButton button = null;
private boolean flag=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.flipper);
flipper = (ViewFlipper) findViewById(R.id.flipper);
button = (ImageButton) findViewById(R.id.back);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
if (flag) {
//跳到下一个flipper
flipper.showNext();
//flipper切换的效果
new AnimationUtils();
flipper.setInAnimation(AnimationUtils.loadAnimation(
FlipperActivity.this, R.anim.push_left_in));
new AnimationUtils();
flipper.setOutAnimation(AnimationUtils.loadAnimation(
FlipperActivity.this, R.anim.push_left_out));
button
.setBackgroundResource(R.drawable.pdp_info_button);
} else {
//跳到下一个flipper
flipper.showNext();
//flipper切换的效果
new AnimationUtils();
flipper.setInAnimation(AnimationUtils.loadAnimation(
FlipperActivity.this, R.anim.push_right_in));
new AnimationUtils();
flipper.setOutAnimation(AnimationUtils.loadAnimation(
FlipperActivity.this, R.anim.push_right_out));
button
.setBackgroundResource(R.drawable.pdp_info_button_back);
}
flag = !flag;
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/whitetextcolor"
>
<ViewFlipper android:id="@+id/flipper"
android:layout_height="120dp" android:layout_width="wrap_content">
<!-- 第一个flipper-->
<RelativeLayout android:layout_height="wrap_content"
android:layout_width="fill_parent" android:id="@+id/relativeLayout1">
<ImageView android:id="@+id/imageView1" android:src="/blog_article/@drawable/md_hometabicon/index.html"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="40dip" android:layout_marginTop="80dip" />
<TextView android:id="@+id/price" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="$5.00"
android:textColor="@color/yellowtextcolor"
android:layout_marginLeft="200dip" android:layout_marginTop="80dip" />
</RelativeLayout>
<!-- 第二个flipper-->
<RelativeLayout android:layout_height="wrap_content"
android:layout_width="fill_parent" android:id="@+id/relativeLayout1">
<TextView android:id="@+id/price" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="这是一座房子,面朝大海,春暖花开"
android:layout_marginLeft="40dip" android:layout_marginTop="80dip"
android:textColor="@color/yellowtextcolor" />
</RelativeLayout>
</ViewFlipper>
<ImageButton android:id="@+id/back" android:background="@drawable/pdp_info_button"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|right" />
</LinearLayout>