Android編程實(shí)現(xiàn)仿QQ發(fā)表說說,上傳照片及彈出框效果【附demo源碼下載】
本文實(shí)例講述了Android編程實(shí)現(xiàn)仿QQ發(fā)表說說,上傳照片及彈出框效果。分享給大家供大家參考,具體如下:
代碼很簡(jiǎn)單,主要就是幾個(gè)動(dòng)畫而已,圖標(biāo)什么的就隨便找了幾個(gè),效果圖:

動(dòng)畫說明:
1.點(diǎn)擊右上角按鈕,菜單從頂部下拉彈出,同時(shí)背景變暗;
2.再次點(diǎn)擊右上角按鈕,點(diǎn)擊返回鍵,或者點(diǎn)擊空白區(qū)域(也就是變暗的部分),菜單向上收回;
3.點(diǎn)擊菜單上的按鈕響應(yīng)事件,同時(shí)菜單收回(效果同2)
重要說明:動(dòng)畫結(jié)束后必須clearAnimation,否則隱藏狀態(tài)的view依然能響應(yīng)點(diǎn)擊事件
主體代碼:
public class MainActivity extends Activity {
//添加數(shù)據(jù)按鈕
private ImageView addDataIv;
//下拉功能菜單
private LinearLayout dropDownView;
private View bgView;
//當(dāng)前下拉菜單是否為顯示狀態(tài)
private boolean showItems = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addDataIv = (ImageView) findViewById(R.id.main_newData);
dropDownView = (LinearLayout) findViewById(R.id.dropDownView);
bgView = findViewById(R.id.main_bg);
addDataIv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!showItems) {
showView();
} else {
dismissView();
}
}
});
//點(diǎn)擊空白隱藏彈出框
bgView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (showItems) {
dismissView();
}
}
});
//下拉功能菜單上按鈕的點(diǎn)擊事件
View.OnClickListener l = new OnClickImpl();
findViewById(R.id.dropDown_item1).setOnClickListener(l);
findViewById(R.id.dropDown_item2).setOnClickListener(l);
findViewById(R.id.dropDown_item3).setOnClickListener(l);
findViewById(R.id.dropDown_item4).setOnClickListener(l);
}
//顯示下拉菜單
private void showView() {
showItems = true;
addDataIv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate_open));
dropDownView.startAnimation(AnimationUtils.loadAnimation(this, R.anim.drop_down));
dropDownView.setVisibility(View.VISIBLE);
bgView.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_dark));
bgView.setVisibility(View.VISIBLE);
}
//隱藏下拉菜單
private void dismissView() {
showItems = false;
addDataIv.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate_close));
Animation dropUpAnim = AnimationUtils.loadAnimation(this, R.anim.drop_up);
dropUpAnim.setAnimationListener(new AnimListenerImpl(dropDownView));
dropDownView.startAnimation(dropUpAnim);
dropDownView.setVisibility(View.INVISIBLE);
Animation fadeLightAnim = AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_light);
fadeLightAnim.setAnimationListener(new AnimListenerImpl(bgView));
bgView.startAnimation(fadeLightAnim);
bgView.setVisibility(View.INVISIBLE);
}
//點(diǎn)擊返回鍵時(shí),如果下拉菜單是顯示狀態(tài),則隱藏它
@Override
public void onBackPressed() {
if (showItems) {
dismissView();
return;
}
super.onBackPressed();
}
private class OnClickImpl implements View.OnClickListener {
@Override
public void onClick(View v) {
if (!showItems) {
return;
}
int id = v.getId();
switch (id) {
case R.id.dropDown_item1:
Toast.makeText(MainActivity.this, "item1 onClick", Toast.LENGTH_SHORT).show();
dismissView();
break;
case R.id.dropDown_item2:
Toast.makeText(MainActivity.this, "item2 onClick", Toast.LENGTH_SHORT).show();
dismissView();
break;
case R.id.dropDown_item3:
Toast.makeText(MainActivity.this, "item3 onClick", Toast.LENGTH_SHORT).show();
dismissView();
break;
case R.id.dropDown_item4:
Toast.makeText(MainActivity.this, "item4 onClick", Toast.LENGTH_SHORT).show();
dismissView();
break;
default:
break;
}
}
}
//動(dòng)畫結(jié)束后必須clearAnimation,否則隱藏狀態(tài)的view依然能響應(yīng)點(diǎn)擊事件
private class AnimListenerImpl implements Animation.AnimationListener {
private View view;
public AnimListenerImpl(View view) {
this.view = view;
}
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
view.clearAnimation();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
}
}
完整實(shí)例代碼點(diǎn)擊此處本站下載。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)動(dòng)畫技巧匯總》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android 多種簡(jiǎn)單的彈出框樣式設(shè)置代碼
- Android實(shí)現(xiàn)可輸入數(shù)據(jù)的彈出框
- Android使用Dialog風(fēng)格彈出框的Activity
- react-native 封裝選擇彈出框示例(試用ios&android)
- Android中自定義PopupWindow實(shí)現(xiàn)彈出框并帶有動(dòng)畫效果
- Android 仿微信朋友圈點(diǎn)贊和評(píng)論彈出框功能
- android自定義彈出框樣式的實(shí)現(xiàn)方法
- 高仿IOS的Android彈出框
- Android仿微信進(jìn)度彈出框的實(shí)現(xiàn)方法
- Android自定義彈出框的方法
相關(guān)文章
Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能
這篇文章主要介紹了Android實(shí)現(xiàn)短信驗(yàn)證碼自動(dòng)填寫功能,感興趣的小伙伴們可以參考一下2015-12-12
Android中RecyclerView拖拽、側(cè)刪功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android中RecyclerView拖拽、側(cè)刪功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-09-09
快速調(diào)試Android應(yīng)用系統(tǒng)修改ro.debuggable屬性的兩種方式
這篇文章主要為大家介紹了快速調(diào)試Android應(yīng)用系統(tǒng)修改ro.debuggable屬性的兩種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Android入門之ListView應(yīng)用解析(二)
這篇文章主要介紹了Android入門之ListView應(yīng)用,繼上一篇之后將對(duì)Android的ListView用法做更深入的剖析,需要的朋友可以參考下2014-08-08
Android超詳細(xì)講解組件ScrollView的使用
本節(jié)帶來的是Android基本UI控件中的第十個(gè):ScrollView(滾動(dòng)條),或者我們應(yīng)該叫他?豎直滾動(dòng)條,對(duì)應(yīng)的另外一個(gè)水平方向上的滾動(dòng)條:HorizontalScrollView,先讓我們來了解ScrollView2022-03-03

