從Notification通知到draw繪圖

1.Notification:

    //創(chuàng)建并發(fā)送通知
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //獲取一個通知管理器
    //創(chuàng)建通知對象
    Notification.Builder builder ;
    int channelId = 1;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){        //Android 8.0適配
        NotificationChannel channel = new NotificationChannel(String.valueOf(channelId),
                "channel_name",
                NotificationManager.IMPORTANCE_HIGH);
        channel.enableLights(true);
        channel.enableVibration(true);
        channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);//設(shè)置是否應(yīng)在鎖定屏幕上顯示此頻道的通知
        channel.setVibrationPattern(new long[]{100,200,300,400,500,600});//設(shè)置震動頻率
        channel.setLightColor(Color.WHITE); //設(shè)置指示燈顏色

        manager.createNotificationChannel(channel);
        builder = new Notification.Builder(this,String.valueOf(channelId));
    }else{
        builder = new Notification.Builder(this);
    }

    Intent intent = new Intent(this,UIActivity.class);//點擊通知后要跳轉(zhuǎn)的目標(biāo)
    PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);


    builder.setContentTitle("您有一個新通知")            //指定通知欄的標(biāo)題內(nèi)容
            .setContentText("點擊打開看看")             //通知的正文內(nèi)容
            .setAutoCancel(true)                        //設(shè)置通知打開后自動消失
            .setWhen(System.currentTimeMillis())        //通知創(chuàng)建的時間
            .setSmallIcon(R.mipmap.toast_img)          //通知顯示的小圖標(biāo)值戳,只能用alpha圖層的圖片進(jìn)行設(shè)置
//                .setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE)//設(shè)置聲音和振動
            .setDefaults(Notification.DEFAULT_ALL)
//                .setOnlyAlertOnce(true)//每次只會提醒一次聲音议谷,不會重復(fù)提醒。
            .setContentIntent(pi);
    Notification notification = builder.build() ;
    //channelId為本條通知的id
    manager.notify(channelId,notification);

2.廣播:

廣播有兩種堕虹,一種是動態(tài)廣播卧晓,一種是靜態(tài)廣播,現(xiàn)在的版本Google不推薦使用靜態(tài)注冊廣播的方法鲫凶,安全性不高禀崖,下面先將一些公共操作說明一下;

Manifest.xml配置application:

    <receiver
        android:name=".notification.MyBroadcastReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="peng" />
            <action android:name="peng2" />
        </intent-filter>
    </receiver>

MyBroadcastReceiver.java://廣播接受者的處理

public class MyBroadcastReceiver extends BroadcastReceiver {
    private static final String ACTION1 = "peng";      //動作1---靜態(tài)
    private static final String ACTION2 = "peng2";     //動作2---動態(tài)

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(ACTION1)){
            ToastUtil.showMsg(context,"MyBroadcastReceiver收到:peng的廣播");
        }else if (intent.getAction().equals(ACTION2)){
            ToastUtil.showMsg(context,"MyBroadcastReceiver收到:peng2的廣播");
        }
    }
}
  • 靜態(tài)廣播 :

    intent = new Intent();
    intent.setAction("peng");//為intent添加動作
    intent.setClassName(this,"com.example.bilibili.notification.MyBroadcastReceiver");
    sendBroadcast(intent);
    
  • 動態(tài)廣播:

      //動態(tài)注冊廣播
      receiver = new MyBroadcastReceiver();
      IntentFilter filter = new IntentFilter();
      filter.addAction("peng2");
      registerReceiver(receiver, filter);
    
      intent = new Intent();
      intent.setAction("peng2");//為intent添加動作
      sendBroadcast(intent);
    

最后螟炫,當(dāng)頁面銷毀時要注銷掉廣播:

 @Override
protected void onDestroy() {
    unregisterReceiver(receiver);
    super.onDestroy();
}

3.AlarmManager:(例:鬧鐘管理通知)

布局文件為一個TimePicker

Intent intent = new Intent(TimePickerActivity.this, AlarmActivity.class);
//獲取顯示鬧鐘的pendingIntent對象
PendingIntent pendingIntent = PendingIntent.getActivity(TimePickerActivity.this,0,intent,0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);//
Calendar calendar = Calendar.getInstance();//獲取日歷對象
calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());//設(shè)置鬧鐘小時數(shù)
calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());//設(shè)置鬧鐘分鐘數(shù)
calendar.set(Calendar.SECOND,0);//設(shè)置鬧鐘秒數(shù)
alarm.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);//設(shè)置鬧鐘
ToastUtil.showMsg(TimePickerActivity.this,"鬧鐘設(shè)置成功");

 /************
  * ELAPSED_REALTIME:在指定的延時后提醒波附,不喚醒系統(tǒng)
  *
  * ELAPSED_REALTIME_WAKEUP:在指定的延時后提醒,喚醒系統(tǒng)
  *
  * RTC:到達(dá)指定時間提醒昼钻,不喚醒系統(tǒng)
  *
  * RTC_WAKEUP:到達(dá)指定時間提醒掸屡,喚醒系統(tǒng)
  * ***********/

4.繪圖Canvas

布局:

<?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="vertical"
  android:padding="15dp">

  <Button
    android:id="@+id/btn_paint_canvas"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="繪制矩形"/>
  <FrameLayout
    android:id="@+id/draw_rect"
    android:layout_width="400dp"
    android:layout_height="100dp"
    android:background="#F1F1F1" />
</LinearLayout>
  • 繪制矩形

      btn_paint_canvas.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              frameLayout_rect.addView(new DrawRect(CanvasActivity.this));//將自定義view添加到幀布局管理器中
          }
      });
    

DrawRect.java:

public class DrawRect extends View {
    public DrawRect(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(0xFFFF6600);
        paint.setStyle(Paint.Style.FILL);//設(shè)置為填充方式
        canvas.drawRect(15,15,280,150,paint);//繪制填充矩形
    }
}
  • 繪制機(jī)器人
    步驟與繪制矩形一致,addView布局換成DrawRobot

DrawRobot.java:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();
    paint.setAntiAlias(true);//采用抗鋸齒功能
    paint.setColor(0xFFA4C739);//綠色

    //繪制機(jī)器人的頭
    RectF rectF = new RectF(10,10,100,100);//定義外輪廓矩形
    rectF.offset(90,20);
    canvas.drawArc(rectF,-10,-160,false,paint);//繪制弧

    //繪制眼睛
    paint.setColor(0xffffffff);
    canvas.drawCircle(165,53,4,paint);//繪制圓
    canvas.drawCircle(125,53,4,paint);//繪制圓

    //繪制天線
    paint.setColor(0xFFA4C739);
    paint.setStrokeWidth(2);//設(shè)置筆觸寬度
    canvas.drawLine(110,15,125,35,paint);//繪制線
    canvas.drawLine(180,15,165,35,paint);//繪制線

    //繪制身體
    canvas.drawRect(100,75,190,150,paint);//繪制矩形
    RectF rectF_body = new RectF(100,140,190,160);
    canvas.drawRoundRect(rectF_body,10,10,paint);//繪制圓角矩形

    //繪制胳膊
    RectF rectF_arm = new RectF(75,75,95,140);
    canvas.drawRoundRect(rectF_arm,10,10,paint);//繪制圓角矩形
    rectF_arm.offset(120,0);
    canvas.drawRoundRect(rectF_arm,10,10,paint);//繪制圓角矩形

    //繪制腿
    RectF rectF_leg = new RectF(115,150,135,200);
    canvas.drawRoundRect(rectF_leg,10,10,paint);//繪制圓角矩形
    rectF_leg.offset(40,0);
    canvas.drawRoundRect(rectF_leg,10,10,paint);//繪制圓角矩形

}
  • 繪制文本
    步驟與繪制矩形一致然评,addView布局換成DrawText

DrawText:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //繪制對白
    Paint paint = new Paint();
    paint.setColor(0xFFFF0000);
    paint.setAntiAlias(true);
    paint.setTextAlign(Paint.Align.LEFT);//設(shè)置文字對齊方式
    paint.setTextSize(20);
    canvas.drawText("你想和我一起",175,160,paint);
    canvas.drawText("去探險嗎仅财?",175,185,paint);
    canvas.drawText("不,我不想去碗淌!",245,45,paint);
}
  • 繪制位圖DrawBitmap
    步驟與繪制矩形一致盏求,addView布局換成DrawBitmap

DrawBitmap:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Paint paint = new Paint();

    String path = Environment.getExternalStorageDirectory()+"/1.jpg";
    Log.v("PATH:",Environment.getExternalStorageDirectory()+"");
    Bitmap bitmap = BitmapFactory.decodeFile(path);//創(chuàng)建位圖對象
    canvas.drawBitmap(bitmap,10,10,paint);

    //挖取一小塊圖片
    Bitmap bitmap1 = Bitmap.createBitmap(bitmap,23,89,250,368);
    canvas.drawBitmap(bitmap1,116,166,paint);
}
  • 繪制路徑DrawPath
    步驟與繪制矩形一致,addView布局換成DrawPath

DrawPath:

 @Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //繪制對白
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(Color.BLUE);
    paint.setStyle(Paint.Style.STROKE);//設(shè)置填充樣式為描邊

    Path path = new Path();
    path.addCircle(150,100,50,Path.Direction.CW);//創(chuàng)建圓形路徑---CW:逆時針亿眠,CCW:順時針
    canvas.drawPath(path,paint);

    Path path2 = new Path();
    paint.setTextSize(34);
    paint.setStyle(Paint.Style.FILL);
    path2.addCircle(350,200,100,Path.Direction.CCW);//創(chuàng)建圓形路徑---CW:逆時針碎罚,CCW:順時針
    //繪制繞路徑的文本
    canvas.drawTextOnPath("活著就是為了改變世界",path2,0,0,paint);
}

5.幀動畫

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="15dp">
    <Button
        android:id="@+id/btn_zhen_anim"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="繪制幀動畫"/>
    <FrameLayout
        android:id="@+id/draw_zhen_anim"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginTop="20dp"
        android:background="@drawable/fairy"/>
</LinearLayout>

fairy.xml:(幀動畫圖片自己去找)

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/progress_1" android:duration="60"/>
    <item android:drawable="@drawable/progress_2" android:duration="60"/>
    <item android:drawable="@drawable/progress_3" android:duration="60"/>
    <item android:drawable="@drawable/progress_4" android:duration="60"/>
    <item android:drawable="@drawable/progress_5" android:duration="60"/>
    <item android:drawable="@drawable/progress_6" android:duration="60"/>
    <item android:drawable="@drawable/progress_7" android:duration="60"/>
    <item android:drawable="@drawable/progress_8" android:duration="60"/>
</animation-list>

代碼:

private AnimationDrawable animationDrawable;
private FrameLayout frameLayout_zhen_anim;
private boolean flag = true;//記錄播放狀態(tài)


frameLayout_zhen_anim = findViewById(R.id.draw_zhen_anim);
animationDrawable = (AnimationDrawable) frameLayout_zhen_anim.getBackground();
btn_zhen_anim.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(flag){
            animationDrawable.start();
            flag = false;
        }else{
            animationDrawable.stop();
            flag = true;
        }
    }
});

6.加載動畫資源文件動畫

布局:

<ImageView
    android:id="@+id/img_bu_anim"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    android:src="@mipmap/bg"
    android:scaleType="centerCrop"/>

R.drawable.translate:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="300"
        android:toYDelta="300"
        android:duration="2000"/>
</set>

R.drawable.scale:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="1"
        android:fromYScale="1"
        android:toXScale="2"
        android:toYScale="2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000"/>
</set>

R.drawable.alpha:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha 
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="2000"/>
</set>

代碼:(我這里放在了drawable里面是不對的,應(yīng)該放到anim文件中纳像,但我的放里面找不到荆烈,暫時不知道原因)

 img_bu_anim.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
//          Animation animation = AnimationUtils.loadAnimation(CanvasActivity.this,R.drawable.alpha);
//          Animation animation = AnimationUtils.loadAnimation(CanvasActivity.this,R.drawable.rotate);
//          Animation animation = AnimationUtils.loadAnimation(CanvasActivity.this,R.drawable.scale);
            Animation animation = AnimationUtils.loadAnimation(CanvasActivity.this,R.drawable.translate);
            img_bu_anim.startAnimation(animation);
        }
    });

7.viewFlipper仿相冊左滑右滑功能前面演示過,請參考從intent使用到GestureOverlayView手勢組件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者憔购。
  • 序言:七十年代末宫峦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子玫鸟,更是在濱河造成了極大的恐慌导绷,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屎飘,死亡現(xiàn)場離奇詭異诵次,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)枚碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铸本,“玉大人肮雨,你說我怎么就攤上這事∠溏瑁” “怎么了怨规?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡足。 經(jīng)常有香客問我波丰,道長,這世上最難降的妖魔是什么舶得? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任掰烟,我火速辦了婚禮,結(jié)果婚禮上沐批,老公的妹妹穿的比我還像新娘纫骑。我一直安慰自己,他們只是感情好九孩,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布先馆。 她就那樣靜靜地躺著,像睡著了一般躺彬。 火紅的嫁衣襯著肌膚如雪煤墙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天宪拥,我揣著相機(jī)與錄音仿野,去河邊找鬼。 笑死江解,一個胖子當(dāng)著我的面吹牛设预,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播犁河,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鳖枕,長吁一口氣:“原來是場噩夢啊……” “哼魄梯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宾符,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酿秸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后魏烫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辣苏,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年哄褒,在試婚紗的時候發(fā)現(xiàn)自己被綠了稀蟋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡呐赡,死狀恐怖退客,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情链嘀,我是刑警寧澤萌狂,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站怀泊,受9級特大地震影響茫藏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霹琼,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一务傲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碧囊,春花似錦树灶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熄驼,卻和暖如春像寒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓜贾。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工诺祸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祭芦。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓筷笨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胃夏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容