Android仿新浪微博發(fā)送菜單界面的實現(xiàn)
效果圖

接下來就是一波貼代碼的過程
自定義Dialog
public class SinaSendView extends Dialog {
private ImageButton ib_dialog_sina_close;
private LinearLayout ll_dialog_sina_write;
private LinearLayout ll_dialog_sina_time;
private LinearLayout ll_dialog_sina_map;
private LinearLayout ll_dialog_sina_menu;
private ImageView iv_dialog_sina_bg,iv_dialog_sina_des;
private Context mContext;
private Boolean hideDes;
private Bitmap screenShot;
private Bitmap bitmap;
private ByteArrayOutputStream baos;
private byte[] bytes;
public SinaSendView(Context context) {
super(context);
this.mContext = context;
}
public SinaSendView(Context context, int themeResId,Boolean hideDes) {
super(context, themeResId);
this.mContext = context;
this.hideDes = hideDes;
}
protected SinaSendView(Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
this.mContext = context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.layout_sina_send_dialog);
ib_dialog_sina_close = (ImageButton) findViewById(R.id.ib_dialog_sina_close);
ll_dialog_sina_write = (LinearLayout) findViewById(R.id.ll_dialog_sina_write);
ll_dialog_sina_time = (LinearLayout) findViewById(R.id.ll_dialog_sina_time);
ll_dialog_sina_map = (LinearLayout) findViewById(R.id.ll_dialog_sina_map);
ll_dialog_sina_menu = (LinearLayout) findViewById(R.id.ll_dialog_sina_menu);
iv_dialog_sina_bg = (ImageView) findViewById(R.id.iv_dialog_sina_bg);
iv_dialog_sina_des = (ImageView) findViewById(R.id.iv_dialog_sina_des);
initView();
}
private void initView() {
setBrulBg();
ll_dialog_sina_menu.setVisibility(View.VISIBLE);
ll_dialog_sina_menu.setAnimation(AnimationUtil.moveToViewLocationFromTop());
ib_dialog_sina_close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ll_dialog_sina_menu.setAnimation(AnimationUtil.moveToViewBottom());
ll_dialog_sina_menu.setVisibility(View.GONE);
dismiss();
}
});
if(hideDes){
iv_dialog_sina_des.setVisibility(View.GONE);
}
}
/**
* 設(shè)置模糊背景
*/
private void setBrulBg(){
screenShot = CommonUtils.getInstance().getScreenShot((Activity) mContext);
bitmap = CommonUtils.getInstance().zoomImg(screenShot, 0.2f);
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 1, baos);
bytes = baos.toByteArray();
Glide.with(mContext)
.load(bytes)
.asBitmap()
.transform(new BlurTransformation(CommonUtils.getInstance().getContext(), 25))
.into(iv_dialog_sina_bg);
}
public void setClick(final SinaSendDialog mSinaSendDialog){
this.show();
ll_dialog_sina_write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSinaSendDialog.onNormalClick();
dismiss();
}
});
ll_dialog_sina_map.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSinaSendDialog.onMapClick();
dismiss();
}
});
ll_dialog_sina_time.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSinaSendDialog.onTimeClick();
dismiss();
}
});
}
@Override
public void dismiss() {
super.dismiss();
if(screenShot != null && !screenShot.isRecycled()){
screenShot.recycle();
screenShot = null;
}
if(bitmap != null && !bitmap.isRecycled()){
bitmap.recycle();
bitmap = null;
}
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
bytes = null;
System.gc();
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/iv_dialog_sina_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
/>
<ImageButton
android:id="@+id/ib_dialog_sina_close"
android:layout_width="15dp"
android:layout_height="15dp"
android:src="@drawable/dialog_sina_send_close"
android:background="@null"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="17dp"
/>
<ImageView
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/line_gray"
android:layout_gravity="bottom"
android:layout_marginBottom="50dp"
/>
<LinearLayout
android:id="@+id/ll_dialog_sina_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="120dp"
android:orientation="horizontal"
android:visibility="gone"
>
<LinearLayout
android:id="@+id/ll_dialog_sina_write"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:src="@drawable/dialog_sina_send_write"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/text_gray"
android:text="一般內(nèi)容"
android:layout_marginTop="8dp"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_dialog_sina_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_marginLeft="35dp"
android:layout_marginRight="35dp"
>
<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:src="@drawable/dialog_sina_send_time"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/text_gray"
android:text="時間膠囊"
android:layout_marginTop="8dp"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_dialog_sina_map"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<ImageView
android:layout_width="75dp"
android:layout_height="75dp"
android:src="@drawable/dialog_sina_send_map"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/text_gray"
android:text="地點膠囊"
android:layout_marginTop="8dp"
/>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/iv_dialog_sina_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dialog_sina_send_des"
android:layout_gravity="center_horizontal"
android:layout_marginTop="70dp"
/>
</FrameLayout>
Style
<style name="SinaSendDialog">
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
工具方法
/**
* 從控件的頂部移動到控件所在位置
*
* @return
*/
public static TranslateAnimation moveToViewLocationFromTop() {
TranslateAnimation mHiddenAction = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
-1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
mHiddenAction.setDuration(500);
return mHiddenAction;
}
/**
* 截取當(dāng)前屏幕
* @param activity
* @return
*/
public Bitmap getScreenShot(Activity activity) {
// 獲取windows中最頂層的view
View view = activity.getWindow().getDecorView();
view.buildDrawingCache();
// 獲取狀態(tài)欄高度
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect);
int statusBarHeights = rect.top;
Display display = activity.getWindowManager().getDefaultDisplay();
// 獲取屏幕寬和高
int widths = display.getWidth();
int heights = display.getHeight();
// 允許當(dāng)前窗口保存緩存信息
view.setDrawingCacheEnabled(true);
// 去掉狀態(tài)欄
Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0,
0, widths, heights);
// 銷毀緩存信息
view.destroyDrawingCache();
return bmp;
}
/**
* 改變bitmap寬高
* @param bm
* @param f
* @return
*/
public Bitmap zoomImg(Bitmap bm,float f){
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = f;
float scaleHeight = f;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
return newbm;
}
接口
public interface SinaSendDialog {
void onNormalClick();
void onTimeClick();
void onMapClick();
}
基本講一下邏輯,背景采用截屏高斯模糊處理,這里一定要降圖片質(zhì)量,不然會慢,按鈕采用一個動畫從上向下劃出,雖然不是特別完美,但是多少有個樣子。
源碼地址:
https://github.com/bertsir/SinaSendView
到這里就結(jié)束啦.
以上就是Android仿新浪微博發(fā)送菜單界面的實現(xiàn)的詳細內(nèi)容,更多關(guān)于Android 發(fā)送菜單界面的實現(xiàn)的資料請關(guān)注腳本之家其它相關(guān)文章!
- Android實現(xiàn)微博菜單彈出效果
- Android 側(cè)滑抽屜菜單的實現(xiàn)代碼
- Android實現(xiàn)動畫效果的自定義下拉菜單功能
- Android實現(xiàn)上下菜單雙向滑動
- Android如何實現(xiàn)底部菜單固定到底部
- Android實現(xiàn)微信加號菜單模式
- Android實現(xiàn)衛(wèi)星菜單效果
- Android自定義轉(zhuǎn)盤菜單效果
- Android底部菜單欄(RadioGroup+Fragment)美化
- Android recyclerView橫條指示器實現(xiàn)淘寶菜單模塊
- android studio 的下拉菜單Spinner使用詳解
相關(guān)文章
Android 出現(xiàn)問題Installation error: INSTALL_FAILED_CONFLICTING_P
這篇文章主要介紹了Android 出現(xiàn)問題Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER解決辦法的相關(guān)資料,需要的朋友可以參考下2016-12-12
Android實現(xiàn)Unity3D下RTMP推送的示例
像Unity3D下的RTMP或RTSP播放器一樣,好多開發(fā)者苦于在Unity環(huán)境下,如何高效率低延遲的把數(shù)據(jù)采集并編碼實時推送到流媒體服務(wù)器,實現(xiàn)Unity場景下的低延遲推拉流方案。本文介紹幾種RTMP推送的方案2021-06-06
基于Android引入IjkPlayer無法播放mkv格式視頻的解決方法
下面小編就為大家分享一篇基于Android引入IjkPlayer無法播放mkv格式視頻的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android仿淘寶詳情頁面viewPager滑動到最后一張圖片跳轉(zhuǎn)的功能
需要做一個仿淘寶客戶端ViewPager滑動到最后一頁,再拖動的時候跳到詳情的功能,剛開始我也迷糊了,通過查閱相關(guān)資料發(fā)現(xiàn)有好多種實現(xiàn)方法,下面小編給大家分享實例代碼,感興趣的朋友一起看看吧2017-03-03
Android RecycleView和線型布局制作聊天布局
大家好,本篇文章主要講的是Android RecycleView和線型布局制作聊天布局,感興趣的同學(xué)趕緊來看一看吧,對你有幫助的話記得收藏一下2022-01-01
Android 新聞界面模擬ListView和ViewPager的應(yīng)用
本文主要介紹 Android ListView和ViewPager的應(yīng)用,這里模擬了新聞界面及實現(xiàn)示例代碼,有需要的小伙伴可以參考下2016-09-09
Android編程之界面實現(xiàn)全屏顯示的方法(2種方法)
這篇文章主要介紹了Android編程之界面實現(xiàn)全屏顯示的方法,結(jié)合實例分析了Java代碼中設(shè)置與Manifest文件設(shè)置2種實現(xiàn)方法,需要的朋友可以參考下2016-01-01

