android dialog 원각 표시 및 검은색 모서리 해결.(우정 힌트)
6260 단어 android 개발
어때, 원시 다이어로그보다 예뻐 보이지.자, 방법이 많을지도 몰라요. 제 방법을 소개해 드릴게요.
우선, 내가 가장 먼저 생각한 것은 다이어로그를 다시 쓰는 것이다.layout 레이아웃을 사용자 정의하고 shape를 참조합니다.xml 원각을 실현합니다.
그 전에 제가 설명해 드리겠습니다. 저희가 새로 만든 레이아웃 파일은 가장 바깥쪽이 아니라면shape를 인용하지 않으면 다음과 같은 문제에 부딪히지 않을 것입니다. 그림을 보십시오.
자세히 보면 네 개의 뿔이다. 네 개의 검은 뿔이 나타난다. 이것은 우리가 원하지 않는 결과이다. 나는 프로필에 아무리 설정해도 안 된다. 한참을 답답했다. 갑자기 전에 다이어로그 디스플레이 이미지의 효과를 발견했다. 예를 들어 보니 정말 한 적이 있다. 보기에 나는 프로그램에 정말 적합하지 않은 것 같다. 열심히 돈을 벌어 장사를 한다.빗나간 것 같다. 본론: 해결 방법은 getWindow()이다.setBackgroundDrawable(new BitmapDrawable());또는 getWindow().setBackgroundDrawableResource(android.R.color.transparent); 이렇게 하면 네 개의 검은 모서리가 나타나지 않을 것이다.
이때 우리는 모서리를 해결했다. 또 하나의 문제가 있다. 당신은 설정 파일에서 중간에 있는 어떤 레이아웃의 배경 색을 설정할 때 이 원각이 삼켜진다는 것을 발견할 수 있다. 해결 방법은 shape에서 중간 충전 색을 설정할 수 있다. 중간 부분에 대해 우리는 레이아웃 파일에 설정할 수 있다. 왜냐하면 중간에 그녀가 원각에 영향을 주지 않기 때문이다.하하, 이렇게 하면 최종 효과가 나타난다.만약 누군가가 말하고자 한다면, 나는 세 가지 색깔과 여러 가지 색깔을 실현할 수 있다. 사실 우리는 shape를 분리할 수 있다. 그렇지 않니? 좀 번거롭지만, 틀림없이 실현할 수 있을 것이다.
보아하니 효과는 그런대로 괜찮은 것 같지만, 지금은 아직 완벽해지고 있다.
자야겠다. 여기까지만 얘기하자. 어쩌면 내가 한 말은 모두 쓸데없는 말일지도 모르지만, 나는 이 위에 세 번이나 끼었다. 해 보았는데도 모르고, 적어서 기억을 깊게 한다.
/*************************************************************************************/
위에서 소개한 것은 사용자 정의 다이어로그로 실현하는 것이다.다음에 우리는 예시를 하나 보겠다.
이것은 내가 현재 프로젝트에서 개발한 보기로 양식이 아직 처리되지 않았기 때문에 좀 거칠어지는 것을 피하기 어렵다.(원인에 대해서: 작은 회사 개발 경험이 있는 친구, 알잖아.)
실현 방법은 위에서 정의한dialog로 충분히 할 수 있습니다.그러나 사용자 정의의 단점은 그녀의 아버지 보기에 통합해야 한다는 것이다.환경 변수 Context가 사용되기 때문입니다.어쩌면 너는 층을 잘 나눌 수 있을지도 몰라.그리고 이 안에도 비교적 많은 인터페이스 조작이 관련되어 있다.미니어처 Activity와 유사합니다.여기서 우리는 또 다른 간단한 방법으로 실현한다:Activity의 스타일을 바꾸는 것이다.
스타일 파일에서 스타일을 사용자 정의합니다.
Activity에서 참조:
또는 기존 스타일을 직접 인용해도 됩니다.여기가 중요한 게 아니야.우선 xml에서 보기를 정의해야 합니다. (여기에서 스타일copy를 내보냅니다. 이렇게 하면 촘촘한 코드보다 편해 보입니다.)
모두가 주의했는지 모르겠다.그녀의 주위는 모두 원각이다.바로 이 원각이 미니 버전의 Activity에 독특한 특색을 더해 줍니다.다음은 제가 구체적으로 설명하겠습니다.
우선 레이아웃의 원각을 배경xml 파일로 설정할 수 있습니다
간단해요. 여기는 설명 안 해요.이렇게 하면 아직 끝나지 않았다. 이렇게 하면 우리는 하반부가 원각이고, 상반부는 원각이 아니다. 왜냐하면 상부는 그림이기 때문이다.여기는 프로필을 통해서는 할 수 없습니다. 코드에 있는 그림을 처리해야 합니다.목적: 그림의 상반부는 원각이다.
코드 세그먼트:
/***
* , .
*/
public static final int ALL = 347120;
public static final int TOP = 547120;
public static final int LEFT = 647120;
public static final int RIGHT = 747120;
public static final int BOTTOM = 847120;
public static Bitmap fillet(int type,Bitmap bitmap,int roundPx) {
try {
// : Bitmap
// 。
// 。
final int width = bitmap.getWidth();
final int height = bitmap.getHeight();
Bitmap paintingBoard = Bitmap.createBitmap(width,height, Config.ARGB_8888);
Canvas canvas = new Canvas(paintingBoard);
canvas.drawARGB(Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT, Color.TRANSPARENT);
final Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.BLACK);
if( TOP == type ){
clipTop(canvas,paint,roundPx,width,height);
}else if( LEFT == type ){
clipLeft(canvas,paint,roundPx,width,height);
}else if( RIGHT == type ){
clipRight(canvas,paint,roundPx,width,height);
}else if( BOTTOM == type ){
clipBottom(canvas,paint,roundPx,width,height);
}else{
clipAll(canvas,paint,roundPx,width,height);
}
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
//
final Rect src = new Rect(0, 0, width, height);
final Rect dst = src;
canvas.drawBitmap(bitmap, src, dst, paint);
return paintingBoard;
} catch (Exception exp) {
return bitmap;
}
}
private static void clipLeft(final Canvas canvas,final Paint paint,int offset,int width,int height){
final Rect block = new Rect(offset,0,width,height);
canvas.drawRect(block, paint);
final RectF rectF = new RectF(0, 0, offset * 2 , height);
canvas.drawRoundRect(rectF, offset, offset, paint);
}
private static void clipRight(final Canvas canvas,final Paint paint,int offset,int width,int height){
final Rect block = new Rect(0, 0, width-offset, height);
canvas.drawRect(block, paint);
final RectF rectF = new RectF(width - offset * 2, 0, width , height);
canvas.drawRoundRect(rectF, offset, offset, paint);
}
private static void clipTop(final Canvas canvas,final Paint paint,int offset,int width,int height){
final Rect block = new Rect(0, offset, width, height);
canvas.drawRect(block, paint);
final RectF rectF = new RectF(0, 0, width , offset * 2);
canvas.drawRoundRect(rectF, offset, offset, paint);
}
private static void clipBottom(final Canvas canvas,final Paint paint,int offset,int width,int height){
final Rect block = new Rect(0, 0, width, height - offset);
canvas.drawRect(block, paint);
final RectF rectF = new RectF(0, height - offset * 2 , width , height);
canvas.drawRoundRect(rectF, offset, offset, paint);
}
private static void clipAll(final Canvas canvas,final Paint paint,int offset,int width,int height){
final RectF rectF = new RectF(0, 0, width , height);
canvas.drawRoundRect(rectF, offset, offset, paint);
}
먼저 이 코드는 다른 사람의 것이라고 성명합니다.상당히 또렷하게 써서 나는 직접 가져와 썼다.
여기에 round Px의 값을 주의해야 합니다.아래의 이 그림을 보십시오.
아마도 어떤 친구들은 그 흰색이 우리의 밑부분 원각 배치라는 것을 이미 알고 있을 것이다.왜냐하면 이때(그림 원각 호도 > 밑부분 원각 레이아웃.)그래서 이런 현상이 나타날 수 있다. 해결 방법은 매우 간단하다. 그림의 원각 호도를 밑부분의 원각 구조의 원각보다 작게 하면 된다. 또는 더욱 정확하게 하기 위해 px를 단위로 이 크기를 인용할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
지능기 하카슨에 참가해 봤어!김택공업대학 스마트폰 애플리케이션이 주최하는 교내 하카슨 아이븐트 사전 개발 본공연 첫날 사후 개발 11월 18일 참가 신청 23호관 등 여러 곳에서 홍보를 많이 한 것 같아요. 12월 2일 날 아이디어 '대학 생활...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.