自定义透明背景ProgressDialog

通过继承Dialog+帧动画实现自定义透明背景ProgressDialog。

下载资源地址:http://download.csdn.net/download/shenyuanqing/8984687

效果动画:

      

CommProgressDialog:

package com.example.administrator.progressdialog;

import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.view.Gravity;
import android.view.KeyEvent;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by Administrator on 2015/7/29.
 */
public class CommProgressDialog extends Dialog {
    private Context context = null;
    private int anim=0;
    private static CommProgressDialog commProgressDialog = null;

    public CommProgressDialog(Context context){
        super(context);
        this.context = context;
    }

    public CommProgressDialog(Context context, int theme, int anim) {
        super(context, theme);
        this.anim=anim;
    }

    public static CommProgressDialog createDialog(Context context,int anim){
        commProgressDialog = new CommProgressDialog(context, R.style.CommProgressDialog ,anim);
        commProgressDialog.setContentView(R.layout.comm_progress_dialog);
        commProgressDialog.getWindow().getAttributes().gravity = Gravity.CENTER;

        return commProgressDialog;
    }

    public void onWindowFocusChanged(boolean hasFocus){

        if (commProgressDialog == null){
            return;
        }

        ImageView imageView = (ImageView) commProgressDialog.findViewById(R.id.iv_loading);
        if(anim!=0) {
            imageView.setBackgroundResource(anim);
        }
        AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
        animationDrawable.start();
    }

    /**
     * 设置标题
     * @param strTitle
     * @return
     */
    public CommProgressDialog setTitile(String strTitle){
        return commProgressDialog;
    }

    /**
     * 设置提示内容
     * @param strMessage
     * @return
     */
    public CommProgressDialog setMessage(String strMessage){
        TextView tvMsg = (TextView)commProgressDialog.findViewById(R.id.tv_loading_msg);

        if (tvMsg != null){
            tvMsg.setText(strMessage);
        }

        return commProgressDialog;
    }

    /**屏蔽返回键**/
    @Override
    public boolean onKeyDown(int keyCode,KeyEvent event){
        if(keyCode==KeyEvent.KEYCODE_BACK)
            return true;
        return super.onKeyDown(keyCode, event);
    }
}

style.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="CustomDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

    <style name="CommProgressDialog" parent="@style/CustomDialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
    </style>

</resources>

comm_progress_dialog.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"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/iv_loading"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@anim/default_anim"
        android:layout_gravity="center"/>
    <TextView
        android:id="@+id/tv_loading_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="5dp"
        android:textSize="16dp"/>
</LinearLayout>

default_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item android:drawable="@mipmap/loading_1" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_2" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_3" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_4" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_5" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_6" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_7" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_8" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_9" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_10" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_11" android:duration="150"></item>
    <item android:drawable="@mipmap/loading_12" android:duration="150"></item>
</animation-list>

my_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@mipmap/chrysanthemum_1" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_2" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_3" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_4" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_5" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_6" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_7" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_8" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_9" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_10" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_11" android:duration="150"></item>
    <item android:drawable="@mipmap/chrysanthemum_12" android:duration="150"></item>
</animation-list>

MainActivity:

package com.example.administrator.progressdialog;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {
    private CommProgressDialog progressDialog=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.bt_show).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (progressDialog == null) {
                    progressDialog = CommProgressDialog.createDialog(MainActivity.this, R.anim.my_anim);
                }
                progressDialog.setMessage("Loading...");
                progressDialog.show();
            }
        });
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-31 20:57:12

自定义透明背景ProgressDialog的相关文章

C# 透明背景Panel, 透明图像, PitureBox透明效果

1.自定义透明 背景Panel控件:在项目中添加类TransparentPanel.cs using System.Windows.Forms; using System.Drawing; public class TransparentPanel : Control { public TransparentPanel(){} protected override void OnPaintBackground(PaintEventArgs e) { //不进行背景的绘制 } protected

vc实现透明位图,透明背景

vc实现透明位图,透明背景 我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来. 一.实现方法 绘制"透明"位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为"透明色".通过将位图的背景色指定为"透明色",在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到

VC++使用CImage PNG转BMP图片透明背景处理

PNG格式的图片是支持透明通道的,BMP格式的图片是没有透明通道的,所以当PNG格式的图片转换为BMP格式时,对于PNG图片的透明背景就需要进行特别的处理. VC++中的HBITMAP是支持透明色的,如果HBITMAP是PNG格式图片的句柄,使用CImage:Save或其它方式保存到文件时,透明背景会变成黑色. 解决这个问题可以用GDI+.LIBPNG等,最简单的方式是使用CImage,直接将图像数据中的透明部分替换为白色或其他颜色. 优点:处理方法简单,效率高,只需CImage: 缺点:在图片

【麦子学院】Android开发教程自定义ListView背景

Android自定义ListView背景 Android ListView是Android开发中非常常用的一个控件,在做UI设计的时候,很多人希望能够改变它的背景来达到更好的视觉效果,改变它的背景其实很简单,我们只要准备一张图片然后指定属性android:background="@drawable/bg",不过不要高兴地太早,当你这么做以后,发现背景是改变了,但是当你拖动或者点击list空白位置的时候发现ListItem都变成黑色的了,如下图所示: 这是为什么呢? 这个要从Listvi

Android 应用开发中如何自定义 Drawable 背景?

2020-02-06 关键字:EditText自定义背景.shape.corners 通过 xml 定义 View 的背景 Drawable 资源还是挺常用的. 本篇博文记录几种常用的自定义 Drawable 方式. 1.圆角矩形 A.普通圆角矩形 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/

ie8 透明背景不能点击问题

最近开发网站,需求是三个一屏,1和3只能看见一半,2显示在中间,无箭头按钮. 因为之前写过一个有前后按钮的插件,想着怎么就在这上面改造,故把前后按钮去掉背景,定位在了1和3的位置上来实现点击前后, 发现按钮在ie8下无论如何修改层级,按钮都不行,于是百度,后来得知这是ie的bug,透明背景的元素会导致click事件失效.非常遗憾. 故又要回到修改脚本或加上透明背景png.

输入金额,SpannableStringBuilder,Dialog无主题和透明背景的使用

转载请注明出处:http://blog.csdn.net/forwardyzk/article/details/43308573 整理了开发汇中遇到的一些小细节. 1.在EditText中输入金额,只能输入正确的金额格式,例如:0.01,0.1,0,123,123.0,123.01 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

Android给TextView和EditText等控件设置透明背景、圆角边框

第一种方法:在drawable文件夹下新建一个文件设置背景样式 代码: 在drawable文件夹下面新建textviewborder.xml <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#80858

Qt 制作透明背景图片与裁剪图片(很实用)

这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下. 制作透明背景图片: void MyPainter::DrawKit() { QImage image(30, 30, QImage::Format_ARGB32); memset(image.bits(), 0x00, image.byteCount()); // 绘制图片 QPainter painter(&image); painter.setPen(QPen(Qt::red, 2, Qt::SolidLine)