1

以下のリンクを参考にアニメーション効果を作っています。 http://www.edumobile.org/android/android-development/custom-popup-window-example/comment-page-1/#comment-1649 .

コード :

     public class TutorialActivity extends Activity implements OnClickListener {

    private static String TAG = TutorialActivity.class.getSimpleName();
    private static final String NULL_STRING = "null";
    private Button mInfoBtn;
    private Animation animShow, animHide;
    private AlertDialog mErrorAlertDialog;
    private boolean isLogOff = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.tutorial);
        mInfoBtn = (Button) findViewById(R.id.btn_info);
        mInfoBtn.setOnClickListener(this);      

    }

    @Override
    public void onClick(View v) {

        initPopup();

    }

    /**
     * Used to show the Logoff Popup menu
     */

    private void initPopup() {

        Intent intent = getIntent();

        final PopupPanel popup = (PopupPanel) findViewById(R.id.popup_window);
        popup.setVisibility(View.VISIBLE);

        animShow = AnimationUtils.loadAnimation(this, R.anim.popup_show);
        animHide = AnimationUtils.loadAnimation(this, R.anim.popup_hide);
        popup.startAnimation(animShow);
        final Button closeButton = (Button) findViewById(R.id.btnClose);
        closeButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                popup.startAnimation(animHide);
                popup.setVisibility(View.GONE);

            }
        });

        final Button cancelAppointmet = (Button) findViewById(R.id.btnCancel);
        final Button logoff = (Button) findViewById(R.id.btnLogoff);

        logoff.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                popup.startAnimation(animHide);
                popup.setVisibility(View.GONE);

            }
        });
        cancelAppointmet.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                popup.startAnimation(animHide);
                popup.setVisibility(View.GONE);

            }
        });


    }



}

PopupPanel.java

     public class PopupPanel extends LinearLayout {
    private Paint innerPaint, borderPaint;

    public PopupPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public PopupPanel(Context context) {
        super(context);
        init();
    }

    private void init() {
        innerPaint = new Paint();
        innerPaint.setARGB(225, 0, 0, 0);
        innerPaint.setAntiAlias(true);

        borderPaint = new Paint();
        borderPaint.setARGB(255, 0, 0, 0);
        borderPaint.setAntiAlias(true);
        borderPaint.setStyle(Style.STROKE);
        borderPaint.setStrokeWidth(2);
    }

    public void setInnerPaint(Paint innerPaint) {
        this.innerPaint = innerPaint;
    }

    public void setBorderPaint(Paint borderPaint) {
        this.borderPaint = borderPaint;
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {

        RectF drawRect = new RectF();
        drawRect.set(0, 0, getMeasuredWidth(), getMeasuredHeight());

        canvas.drawRoundRect(drawRect, 5, 5, innerPaint);
        canvas.drawRoundRect(drawRect, 5, 5, borderPaint);

        super.dispatchDraw(canvas);
    }

}

チュートリアル.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <RelativeLayout
            android:id="@+id/heading"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="@drawable/header_bg_short" >

            <Button
                android:id="@+id/btn_info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10px"
                android:background="@drawable/btn_info" >
            </Button>

            <ImageView
                android:id="@+id/iveMailMinder"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/header_text" />
        </RelativeLayout>

        <ImageView
            android:id="@+id/tutorilaimage"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@id/heading"
            android:scaleType="fitXY"
            android:src="@drawable/tutorial_android3" />
    </RelativeLayout>

    <com.xxx.com.PopupPanel
        android:id="@+id/popup_window"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:gravity="left"
        android:orientation="vertical"
        android:visibility="gone" >

        <Button
            android:id="@+id/btnClose"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="10dp"
            android:enabled="false"
            android:text="@string/btn_close_name"
            android:textSize="16sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btnLogoff"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="5dp"
            android:enabled="false"
            android:text="@string/btn_logoff_name"
            android:textSize="16sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/btnCancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:layout_marginTop="10dp"
            android:text="@string/btn_cancel_name"
            android:textSize="16sp"
            android:textStyle="bold" />
    </com.xxx.com.PopupPanel>

</FrameLayout>

.Code は、Samsung Galaxy S3を除くすべてのデバイスで動作しています。

「情報」ボタンをクリックするとアニメーションが表示されます。

S3で、「情報」ボタンを長くクリックするとアニメーションが表示されることがわかりました。通常のクリックイベントではアニメーションは表示されません。

4

3 に答える 3

0

「Fource GPU Rendering」を有効にすると、S3 でアニメーションが機能しますが、その理由を調べる必要があります

于 2013-04-04T09:39:39.140 に答える
0

tragetVersion を 14 にすると、より高いバージョン (Jelly Bean など) でいくつかの UI の変更が見られます。私の意図は、UI に影響を与えないことです。問題を修正する必要があります。

于 2013-03-07T16:09:46.767 に答える
0

私は同じ問題に直面していましたが、マニフェストのtargetSDkを14に設定して修正しました

于 2013-02-07T10:12:30.367 に答える